Octopus30.net >> Les discussions >> Scripts et astuces >> [PHP] Indiquer le titre de la page dans l'url
Page 1
 
 

[PHP] Indiquer le titre de la page dans l'url

23/11/2010 à 19:04:55
function cree_url($chaine) {
$chaine=strtr($chaine, "OoYÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿ", "OoYAAAAAAACEEEEIIIIDNOOOOOOUUUUYbsaaaaaaaceeeeiiiidnoooooouuuyyby");
$caract_suppr=array("'","’","'","'","\"");
$chaine=str_replace($caract_suppr," ",$chaine);
$caract_suppr=array(".",":",",",";","!","?");
$chaine=str_replace($caract_suppr,"",$chaine);
$chaine=trim($chaine);
$chaine=strtr($chaine," ","-");
return $chaine;
}


Avec cette fonction, vous pouvez afficher dans vos url le titre de votre page. Ca permet d'améliorer le référencement par les moteurs de recherche.

La fonction est toute simple, mais je la détaille quand même :
* la première chose faite est la suppression de tous les accents.
* on supprime ensuite les apostrophes et autres guillemets, ainsi que tous les signes de ponctuation.
* ensuite on supprime les espaces aux extrémités et on remplace tous les espaces par des tirets.
Et c'est fini, on a une jolie chaine de caractères à mettre dans son url  :)
"Le pire, c'est quoi ? L'ignorance ou l'indifférence ? - Je sais pas ... et je m'en fous !"
03/01/2011 à 17:21:07
Je pense qu'il t'en manque... Voici la mienne (sans doute inspirée de la tienne il y a longtemps !) :


function str_to_url($chaine)
{
$caract_suppr = array("'","’","'","'","_","=");
$chaine = str_replace($caract_suppr," ",$chaine);
$caract_suppr = array("\"",""",""",""");
$chaine = str_replace($caract_suppr,"",$chaine);
$from = "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝŸÞßàáâãäåçèéêëìíîïðñòóôõöøùúûüýÿþ";
$to = "AAAAAACEEEEIIIIDNOOOOOOUUUUYYbsaaaaaaceeeeiiiidnoooooouuuuyyb";
$chaine = strtr($chaine, $from, $to);
$caract_suppr = array("æ","œ","Æ","Œ","&","€","£");
$caract_rempl = array("ae","oe","Ae","Oe","et","e","l");
$chaine = str_replace($caract_suppr, $caract_rempl, $chaine);
$caract_suppr = array(".",":",",",";","`","!","?","(",")","[","]","{","}","/","+","^","$","%","#");
$chaine = str_replace($caract_suppr,"",$chaine);
$chaine = trim($chaine);
$chaine = strtr($chaine," ","-");
return strtolower($chaine);
}

 :hello:
Au creux de nos mères qu'il fait bon mûrir, et puis j'ai vu de la lumière alors je suis sorti... Et j'ai dit : Bonne idée !
03/01/2011 à 18:05:55
En effet, un écart sur les æ remplacés à tort en a au lieu de ae et tous les autres qui me manquaient  :jap:
"Le pire, c'est quoi ? L'ignorance ou l'indifférence ? - Je sais pas ... et je m'en fous !"
05/06/2011 à 23:49:39
En utf8, la fonction strtr ne fonctionne pas comme expéré puisque la substitution se fait octet par octet.

Il faut donc remplacer la première partie par
	$chaine=str_replace(
"ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝŸÞßàáâãäåçèéêëìíîïðñòóôõöøùúûüýÿþ",
"AAAAAACEEEEIIIIDNOOOOOOUUUUYYbsaaaaaaceeeeiiiidnoooooouuuuyyb",
$chaine);
"Le pire, c'est quoi ? L'ignorance ou l'indifférence ? - Je sais pas ... et je m'en fous !"
24/07/2011 à 16:17:31
La fonction str_replace ne réagit pas comme prévu pour le coup.

Il faut utiliser donc soit
$str_from=array('À','Á','Â','Ã','Ä','Å','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','Ÿ','Þ','ß','à','á','â','ã','ä','å','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô','õ','ö','ø','ù','ú','û','ü','ý','ÿ','þ');
$str_dest=array('A','A','A','A','A','A','C','E','E','E','E','I','I','I','I','D','N','O','O','O','O','O','O','U','U','U','U','Y','Y','b','s','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','d','n','o','o','o','o','o','o','u','u','u','u','y','y','b');
$chaine=str_replace($str_from,$str_dest,$chaine);


soit
$str_array=array(
'À'=>'A','Á'=>'A','Â'=>'A','Ã'=>'A','Ä'=>'A','Å'=>'A',
'à'=>'a','á'=>'a','â'=>'a','ã'=>'a','ä'=>'a','å'=>'a',
'Ç'=>'C',
'ç'=>'c',
'È'=>'E','É'=>'E','Ê'=>'E','Ë'=>'E',
'è'=>'e','é'=>'e','ê'=>'e','ë'=>'e',
'Ì'=>'I','Í'=>'I','Î'=>'I','Ï'=>'I',
'ì'=>'i','í'=>'i','î'=>'i','ï'=>'i',
'Ð'=>'D',
'ð'=>'d',
'Ñ'=>'N',
'ñ'=>'n',
'Ò'=>'O','Ó'=>'O','Ô'=>'O','Õ'=>'O','Ö'=>'O','Ø'=>'O',
'ò'=>'o','ó'=>'o','ô'=>'o','õ'=>'o','ö'=>'o','ø'=>'o',
'Ù'=>'U','Ú'=>'U','Û'=>'U','Ü'=>'U',
'ù'=>'u','ú'=>'u','û'=>'u','ü'=>'u',
'Ý'=>'Y','Ÿ'=>'Y','Þ'=>'b','ß'=>'s',
'ý'=>'y','ÿ'=>'y','þ'=>'b');
$chaine=strtr($chaine,$str_array);

"Le pire, c'est quoi ? L'ignorance ou l'indifférence ? - Je sais pas ... et je m'en fous !"
24/07/2011 à 21:39:31
En UTF-8 il faut pas utiliser les fonctions mb_* ?

http://php.net/manual/fr/ref.mbstring.php
Au creux de nos mères qu'il fait bon mûrir, et puis j'ai vu de la lumière alors je suis sorti... Et j'ai dit : Bonne idée !
24/07/2011 à 22:10:51
Si, mais uniquement pour les fonctions qui travaillent sur la valeur en octet de la chaine.
strtr et str_replace ne sont pas concernées puisqu'utilisant des tableaux ou des chaines remplacée en 1 pour 1.

C'est d'ailleurs l'erreur que j'ai faite sur mon message d'avant, le remplacement n'était que de la chaine complète par l'autre chaine complète non accentuée.  :pet1cable:
"Le pire, c'est quoi ? L'ignorance ou l'indifférence ? - Je sais pas ... et je m'en fous !"
Page 1
 
 
Octopus30.net >> Les discussions >> Scripts et astuces >> [PHP] Indiquer le titre de la page dans l'url
 
Forum Octopus30 version 6.0.7 / Poulpe 2001-2019
Page générée en 38ms (9 requêtes SQL : 14ms)
Site enregistré à la CNIL sous le numéro 1002899