Nettoyer une chaine pour une URL, en PHP

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 ;)

Ajouter un commentaire sur cet article

  1. 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-]#
    #\-+#

  2. Darklg dit :

    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 :)

  3. Country dit :

    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

  4. 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 !

Ajouter un commentaire

Tweets, Trackbacks, Pingbacks