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 😉

Partager cet article

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

  • 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

  • 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 !