Nettoyer une chaine pour une URL, en PHP
Posté le Mardi 22 juillet 2008, à 17:58 par Darklg - 436 mots - 76651 lectures, ou pasUn problème simple peut parfois se poser à vous :
Vous disposez d’une chaîne de caractères ( un titre d’article, par exemple ), que vous souhaitez utiliser pour une URL. Malheureusement, vous ne pouvez pas utiliser directement cette chaine de caractères, qui ne serait pas optimisée pour le référencement, et très peu lisible.
C’est là qu’intervient la fonction clear_url(). Cette dernière nettoie votre chaine, et en retourne une propre et optimisée, pour une url, un identifiant, etc
function clean_url($texte) { //Suppression des espaces en début et fin de chaîne $texte = trim($texte); //Suppression des accents $texte = strtr($texte,'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËéèêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ','aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn'); //mise en minuscule $texte = strtolower($texte); //Suppression des espaces et caracteres spéciaux $texte = str_replace(" ",'-',$texte); $texte = preg_replace('#([^a-z0-9-])#','-',$texte); //Suppression des tirets multiples $texte = preg_replace('#([-]+)#','-',$texte); //Suppression du premier caractère si c'est un tiret if($texte{0} == '-') $texte = substr($texte,1); //Suppression du dernier caractère si c'est un tiret if(substr($texte, -1, 1) == '-') $texte = substr($texte, 0, -1); return $texte; }
Elle peut être optimisée ( en virant les étapes intermédiaires ), mais est fonctionnelle et plutôt utile ![]()
Si vous avez une optimisation à partager, n’hésitez pas






406 abonnés à mon flux RSS
594 followers sur Twitter
Je peux chipoter ? Ok c’est parti !
- Ta liste d’accents est incomplète, je publierai sûrement la mienne un de ces jours sur mon blog
Par exemple rien que pour les A, tu as ÀÁÂÃÄÅĀĂǍẠẢẤẦẨẪẬẮẰẲẴẶǺĄ
- Tes expressions régulières sont optimisables :
#[^a-z0-9-]#
#\-+#
J’ai dit que toute optimisation était la bienvenue
Quant aux regex, c’est une façon de faire que j’ai apprise en débutant ( siteduzero, et oui ! ), donc il faudrait effectivement que je me mette à jour
En complément
:
- Le str_replace() pour les espaces est inutile, vu que l’expression qui le suit va elle aussi les remplacer par des « - »
- Le trim() du début ainsi que les 2 substr() peuvent être supprimés, et remplacés par un trim($texte,’-') à la fin du traitement
En utilisant ta fonction, j’avais des « n » qui apparaissaient en remplacement de caractères spéciaux.
J’ai donc modifié ta fonction et utilisé un morceau d’une autre fonction similaire (avec utf8_decode) : http://fr2.php.net/manual/fr/function.strtr.php#85556
et du coup la fonction de formatage pour les URL fontionne à merveille !