Page 1 sur 1

Url rewriting et tirets

Posté : 17 mai 2019, 17:15
par yoann38
Salut tout le monde.

Bon voilà voilà.

J'ai ma regle ainsi :
RewriteRule ^siteweb-([a-z-]+)-([a-z-]+).html$   siteweb.php?categorie=$1&sous_categorie=$2 [L]
Dans la page le lien est sous cette forme:
<li><a href="siteweb-'.$_GET['categorie'].'-'.simplification($v).'.html">'.ucfirst(strtolower($v)).'</a></li>
Donc le problème provient de $_GET['categorie'] qui par exemple coté bdd correspond à Agence de Voyage.

Du coup les espace deviennent des tirets dans mon url et ce fait ca bug au niveau de l'url_rewriting.

Que faire svp ?

Re: Url rewriting et tirets

Posté : 17 mai 2019, 17:23
par Saian
Salut, je dirais, soit tu fais en sorte que les espaces ne soient plus remplacés par des tirets, soit tu changes le séparateur dans ta règle (un / ?).

PS : tu peux faire avec cette expression à condition que seul le dernier groupe puisse contenir des tirets, sinon c'est inextricable avec une seule expression.
^siteweb-([a-z]+)-([a-z-]+).html$


EDIT : quand je dis que les espaces ne soient plus remplacés par des tirets, j'entends qu'ils soient supprimés ou bien remplacés par un autre caractère que le tiret, en adaptant bien entendu l'expression en fonction.

Re: Url rewriting et tirets

Posté : 17 mai 2019, 17:36
par @rthur
Quand on veut transformer une chaine de caractère (typqiement avec des espaces et des caractères spéciaux) en URL, on crée ce qu'on appelle un "slug"
https://www.google.com/search?q=php+slu ... github.com

Re: Url rewriting et tirets

Posté : 17 mai 2019, 17:59
par yoann38
je suis désolé mais je ne vois pas comment faire,
Un exemple plus précis est ce possible ?

Re: Url rewriting et tirets

Posté : 17 mai 2019, 18:05
par Saian
Et bien tu écris des adresses comme ça par exemple :
siteweb/categorie-1/sous-categorie.html
RewriteRule ^siteweb/([a-z-]+)/([a-z-]+).html$   siteweb.php?categorie=$1&sous_categorie=$2 [L]
Ainsi pas de problème avec les tirets.

Ou alors tu fais des adresses comme ça (pas de tiret dans la catégorie ):
siteweb-categorie1-sous-categorie.html
RewriteRule ^siteweb-([a-z]+)-([a-z-]+).html$   siteweb.php?categorie=$1&sous_categorie=$2 [L]

Si tu peux avoir un nombre variable de tirets dans catégorie et sous catégorie tu ne pourras solutionner le problème avec le seul caractère tiret comme séparateur (à moins de le doubler :P ).

Re: Url rewriting et tirets

Posté : 17 mai 2019, 18:23
par yoann38
peut etre la premiere solution
Mais j'aimerais comprendre cette histoire de slug ...

Re: Url rewriting et tirets

Posté : 17 mai 2019, 18:26
par Saian
Le slug c'est juste le fait de transformer la chaine pour l'utiliser dans une url (c'est peut être un peu réducteur ? ^^). De base on remplace les caractères accentués par leurs caractères non accentués, on met tout en minuscule et on remplace les espaces par des tirets. Mais comme tu disais "Du coup les espaces deviennent des tirets" j'ai pensé que ta chaine était déjà transformée, non ?

Re: Url rewriting et tirets

Posté : 17 mai 2019, 18:41
par yoann38
Lol bah j'ai fait une fonction pour ca moi lol
// Simplifier une chaine
	function simplification($chaineNonValide, $separator='-') {
		
		$chaineNonValide = strip_tags(html_entity_decode($chaineNonValide));	
		
		$accented = array("-",'&','À','Á','Â','Ã','Ä','Å','Æ','Ă','Ą','Ç','Ć','Č','Œ','Ď','Đ','à','á','â','ã','ä','å','æ','ă','ą','ç','ć','č','œ','ď','đ','È','É','Ê','Ë','Ę','Ě','Ğ','Ì','Í','Î','Ï','İ','Ĺ','Ľ','Ł','è','é','ê','ë','ę','ě','ğ','ì','í','î','ï','ı','ĺ','ľ','ł','Ñ','Ń','Ň','Ò','Ó','Ô','Õ','Ö','Ø','Ő','Ŕ','Ř','Ś','Ş','Š','ñ','ń','ň','ò','ó','ô','ö','ø','ő','ŕ','ř','ś','ş','š','Ţ','Ť','Ù','Ú','Û','Ų','Ü','Ů','Ű','Ý','ß','Ź','Ż','Ž','ţ','ť','ù','ú','û','ų','ü','ů','ű','ý','ÿ','ź','ż','ž','А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я');
		$replace = array("-",'et','A','A','A','A','A','A','AE','A','A','C','C','C','CE','D','D','a','a','a','a','a','a','ae','a','a','c','c','c','ce','d','d','E','E','E','E','E','E','G','I','I','I','I','I','L','L','L','e','e','e','e','e','e','g','i','i','i','i','i','l','l','l','N','N','N','O','O','O','O','O','O','O','R','R','S','S','S','n','n','n','o','o','o','o','o','o','r','r','s','s','s','T','T','U','U','U','U','U','U','U','Y','Y','Z','Z','Z','t','t','u','u','u','u','u','u','u','y','y','z','z','z','A','B','B','r','A','E','E','X','3','N','N','K','N','M','H','O','N','P','a','b','b','r','a','e','e','x','3','n','n','k','n','m','h','o','p','C','T','Y','O','X','U','u','W','W','b','b','b','E','O','R','c','t','y','o','x','u','u','w','w','b','b','b','e','o','r ');
		$chaineValide = str_replace($accented, $replace, $chaineNonValide);
		
		$search = array ('@[ ]@i','@[^a-zA-Z0-9_-]@');
		$replace = array ($separator, '');
		$chaineValide = preg_replace('/(?:(['.$separator.'])\1)\1*/', '$1', trim(strtolower(preg_replace($search, $replace, $chaineValide)), $separator));
		
	return $chaineValide;
				
	}
Donc en gros j'ai pas le choix ?
obligé de mettre des / à la place des - ?

Re: Url rewriting et tirets

Posté : 17 mai 2019, 19:39
par Saian
Si le nombre de tirets peut être variable dans la catégorie et dans la sous catégorie tu ne pourras pas écrire une expression régulière pour les extraire en utilisant le tiret comme séparateur (à moins de le doubler).

Après t'es pas obligé de mettre des slashs tu peux mettre autre chose, ou imaginer une autre forme d'url (siteweb-categorie-principale--sous-categorie.html, etc), ou écrire plusieurs règles, une pour chaque catégorie avec la catégorie en dur.

siteweb-categorie-principale--sous-categorie.html
RewriteRule ^siteweb-([a-z-]+)--([a-z-]+).html$   siteweb.php?categorie=$1&sous_categorie=$2 [L]