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 :
Le lien sur ma page :
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]
Et ma fonction "rewrite" :
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>
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 .
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)); }
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
Partager