IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

URL Rewriting et chaîne de caractères


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 17
    Par défaut URL Rewriting et chaîne de caractères
    Bonjour à tous,

    Je suis en train de mettre en place un URL rewriting sur mon site, et je galère vraiment sur certains points.

    Je voudrais une URL de type http://www.thesite.com/news/125/bonjour-tout-le-monde avec "bonjour-tout-le-monde" le titre de ma news.

    Dans mon htaccess :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    RewriteRule ^news\/$  index\.php?cat=1 [L]
    RewriteRule ^news\/([0-9]+)(.*)$  index\.php?cat=1&news_id=$1  [L]
    Le lien sur ma page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href='news/".$row['news_id']."/".$this->rewrite($row['title'])."/'>".$row['title']."</a>
    Et ma fonction "rewrite" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    function rewrite($text) { 
          $tofind = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ"; 
          $replac = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn"; 
          $text = strtr($text,$tofind,$replac); 
     
          $text = strtolower($text); 
     
          $text = ereg_replace("[^a-zA-Z0-9]", "-", $text); 
     
          while (strstr($text, '--')) 
             $text = str_replace('--', '-', $text); 
     
          return(ereg_replace("-$", "", $text)); 
       }
    Quand je tape http://www.thesite.com/news/ c'est OK, http://www.thesite.com/news/125/ c'est OK, et http://www.thesite.com/news/125/nimp...our-faire-joli , c'est OK .
    Mon premier problème est de savoir si ma manière de faire est correcte, et si elle ne pose pas de problème de sécurité ou autres ? Le fait de taper n'importe quoi amène sur une 404 http://www.thesite.com/news/index.php?cat=1, qu'il suffit (je pense) de rediriger.


    Mon principal problème vient de la chaîne de caractère employée pour la dernière partie de l'adresse, ma fonction ne transforme pas correctement le résultat de ma requête allant chercher le titre.

    Par exemple, avec ma fonction "Oué les garçons" deviens "oun-les-garn-ons" au lieu de "oue-les-garcons"...
    Cela est due au texte dans ma base qui est en latin1_swedich_ci, par exemple le "ç" est "ç".

    Je voudrais connaître ci possible la meilleure façon de faire dans ce cas.
    Je ne sais pas si l'interclassement du champs doit être modifié, si il suffit de changer ma fonction ou si je devrais rajouter un champs "urlpropre" dans ma table ...

    Merci pour votre aide

    Bonne soirée

  2. #2
    Membre expérimenté
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2008
    Messages : 185
    Par défaut
    Bonsoir,

    Tout ce que tu fait m'a pas l'air mal, et c'est très courant !

    Pour ton souci, tu devrais peut être essayer utf8_encode ou utf8_decode ^_^"

    Par contre, quand tu fais /125/n'importe-quoi, il faut que tu fasse une redirection en mettant le bon texte ^_^

    Bonne chance \o/

  3. #3
    Membre éprouvé Avatar de TiEuAM
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 75
    Par défaut
    Salut,
    Le champs "urlpropre" rajouté dans ta table est une bonne solution a mon goux, qui soulagera ton proc de calculs inutile, surtout si tu rewrite plusieurs liens par page.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 17
    Par défaut
    Merci pour vos réponses !

    Je ne touche plus à l'URL rewriting et a mon <a> .


    En revanche, la conversion des titres de news en URL reste problématique ...

    En ajoutant un champs "urlpropre" à ma table avec rewrite($_POST['title']) comme VALUES dans mon INSERT TO, le "ç" reste "ç" dans le POST et donc mon urlpropre crée reste par exemple "oun-les-garn-ons" ...

    On peut voir dans les news de mac4ever.com par exemple que c'est possible de tout bien convertir, reste a savoir comment ils font .

    En tout cas c'est juste une histoire d'encodage, mais je suis pas très à l'aise avec ça ...
    Ce qui veut dire que c'est le POST qui converti ainsi ma chaîne ...

    N'y a t'il pas moyen de rentrer le texte par le POST tel quel dans la base sans "transformation" ?

    Sinon connaissez vous une fonction convertissant les caractères spéciaux ?


    Merci pour votre aide

  5. #5
    Membre éprouvé Avatar de TiEuAM
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 75
    Par défaut
    Tu as effectivement des soucis d'encodage, visiblement ton php a l'air de traiter tes données en utf8 mais le navigateur les lits mode ISO.

    Essaye de rajouter simplement la bonne balise meta dans le header de ta page html, avec le charset utf8 de spécifier.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 17
    Par défaut
    Bonjour à tous, et désolé pour ce petit moment d'absence

    J'ai déjà bien dans mes <head> la meta suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    Pour info, dans l'accueil de mon phpMyAdmin j'ai :
    Interclassement pour la connexion MySQL: utf8_unicode_ci

    Sinon dans les tables, les titres et autres sont en latin1_swedish_ci .


    J'ai remarqué que j'avais aussi ce problème avec la fonction mail de php, les mails reçus sont truffés de é et compagnie pour les données récupérée en POST.


    Ma balise meta à pourtant l'air correcte, je ne vois pas d'où ça pourrait venir à part ça ...

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/04/2010, 21h08
  2. Recherche URL dans grande chaîne de caractères.
    Par Le Mad dans le forum Développement
    Réponses: 4
    Dernier message: 10/03/2009, 15h20
  3. [PHP-JS] Comparaison un URL avec une chaîne de caractères
    Par moustique95 dans le forum Langage
    Réponses: 5
    Dernier message: 06/08/2008, 10h05
  4. Réponses: 6
    Dernier message: 30/07/2008, 15h33
  5. Url rewriting et chaînes de caractères
    Par error404 dans le forum Apache
    Réponses: 4
    Dernier message: 12/10/2007, 12h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo