Nettoyer une chaine pour une URL, en PHP
Attention, cet article a été déplacé dans les archives, donc le contenu peut ne plus être à jour. A vous de voir 🙂
Un 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 😉
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 !
Vous pouvez aussi regarder la fonction esc_url de WordPress (ici : http://core.trac.wordpress.org/browser/tags/3.5.2/wp-includes/formatting.php ) bien complète 🙂
J’avoue que la fonction trim est plus simple et très très pratique, notamment sur des scripts convertissants des titres de news en URL.
Merci pour le tuto !