[RESOLU] Ne conserver qu'un seul tiret pour une URL propre

akedouille
Invité n'ayant pas de compte PHPfrance

06 août 2012, 01:16

Bonjour à la communauté !

Voila j'ai un soucis avec les URL générées sur mon site. Avec un titre tel que "quelle belle femme !", l'URL générée ressemblera à ça : http://www.monsite.com/quelle-belle-femme--- . J'aimerai que l'URL soit plus clean, en ne gardant qu'un seul tiret à la fois.

Voici la fonction qui génère le tout :
public static function seoname($name) {
	$name = strtolower($name);
	$translit = array('Á'=>'A','À'=>'A','Â'=>'A','Ä'=>'A','Ã'=>'A','Å'=>'A','Ç'=>'C','É'=>'E','È'=>'E','Ê'=>'E','Ë'=>'E','Í'=>'I','Ï'=>'I','Î'=>'I','Ì'=>'I','Ñ'=>'N','Ó'=>'O','Ò'=>'O','Ô'=>'O','Ö'=>'O','Õ'=>'O','Ú'=>'U','Ù'=>'U','Û'=>'U','Ü'=>'U','Ý'=>'Y','á'=>'a','à'=>'a','â'=>'a','ä'=>'a','ã'=>'a','å'=>'a','ç'=>'c','é'=>'e','è'=>'e','ê'=>'e','ë'=>'e','í'=>'i','ì'=>'i','î'=>'i','ï'=>'i','ñ'=>'n','ó'=>'o','ò'=>'o','ô'=>'o','ö'=>'o','õ'=>'o','ú'=>'u','ù'=>'u','û'=>'u','ü'=>'u','ý'=>'y','ÿ'=>'y');
	$name = strtr($name, $translit);
	return preg_replace('#[^a-zA-Z0-9\-\._]#', '-', $name);
Si quelqu'un pouvait m'aider, je lui en serais très reconnaissant :)

Merci d'avance

ViPHP
xTG
ViPHP | 7331 Messages

06 août 2012, 07:01

A la place de ton preg, remplaces tout ce que tu ne veux pas par un espace.
Puis utilises trim() pour virer les espaces sur les cotés.
Et enfin remplaces les espaces restants par des tirets.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

06 août 2012, 10:53

C'est la solution que j'utilise également, avec une petite subtilité lorsque je remplace les espaces par les tirets : s'il y a plusieurs espaces consécutifs au "milieu" de la chaine, je ne met qu'un seul tiret :)
$name = preg_replace("#[ ]+#", "-", $name);
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Akedouille
Invité n'ayant pas de compte PHPfrance

06 août 2012, 14:10

Merci de votre aide, j'ai obtenu ce que je voulais :)