Bonjour,

Je cherche à faire une fonction qui remplace les accents, caracteres spéciaux et les espaces par "-" pour des url.
Ex: chéène AveC Pl&in dE çaractères___s--
dois donner cheene-avec-plein-de-caracteres-s

J'ai trouvé cette fonction sur le net:

function replace_accents($str) //on déclare la fonction 
{
  $str = htmlentities($str, ENT_COMPAT, "UTF-8");
  $str = preg_replace('/&([a-zA-Z]) (uml|acute|grave|circ|tilde);/','$1',$str);
  return html_entity_decode($str);
}

Mais elle ne marche pas chez moi, et ne transforme pas les espaces en "-", ne mets pas les caractères en minuscule...

Avez vous une fonction qui fais cela ?

Merci d'avance,
I.

4 réponses


codimix
Auteur
Réponse acceptée

Je croyais qu'il existait une fonction pour ce genre de truc...

Surtout que je fais ça manuellement plein de fois...

Alors pour ceux qui sont dans le même cas, j'ai passé un bout de temps à chercher les caractères spéciaux que je connais :

function mon_urlencode($url)
{
$url=strtolower(trim(stripslashes($url)));
//--caractères supprimés.
$url=str_replace("…","",$url);
$url=str_replace("«","",$url);
$url=str_replace("«","",$url);
$url=str_replace("»","",$url);
$url=str_replace("»","",$url);
$url=str_replace("!","",$url);
$url=str_replace("?","",$url);
$url=str_replace("\"","",$url);
$url=str_replace("/","",$url);
$url=str_replace(":","",$url);
$url=str_replace(")","",$url);
$url=str_replace("#","",$url);
$url=str_replace(".","",$url);
$url=str_replace(",","",$url);
$url=str_replace("%","",$url);
$url=str_replace("<","",$url);
$url=str_replace(">","",$url);

//--caractères remplacés.
$url=str_replace(" ","-",$url);
$url=str_replace("'","-",$url);
$url=str_replace("’","-",$url);
$url=str_replace("(","-",$url);
$url=str_replace("_","-",$url);
$url=str_replace("--", "-", $url);
$url=str_replace("&", "et", $url);
$url=str_replace("é","e",$url);
$url=str_replace("€","euros",$url);
$url=str_replace("è","e",$url);
$url=str_replace("ê","e",$url);
$url=str_replace("ë","e",$url);
$url=str_replace("à","a",$url);
$url=str_replace("â","a",$url);
$url=str_replace("ä","a",$url);
$url=str_replace("ù","u",$url);
$url=str_replace("û","u",$url);
$url=str_replace("ü","u",$url);
$url=str_replace("ï","i",$url);
$url=str_replace("î","i",$url);
$url=str_replace("ô","o",$url);
$url=str_replace("ö","o",$url);
$url=str_replace("ç","c",$url);
$url=str_replace(array('À','Á','Â','Ã','Ä'),"a",$url);
$url=str_replace(array('È','É','Ê','Ë'),"e",$url);
$url=str_replace(array('Ç'),"c",$url);
$url=str_replace(array('Ì','Í','Î','Ï'),"i",$url);
$url=str_replace(array('Ñ'),"n",$url);
$url=str_replace(array('Ù','Ú','Ü','Û'),"u",$url);
$url=str_replace(array('Ý'),"y",$url);
$url=str_replace(array('Ò','Ó','Ô','Õ','Ö'),"o",$url);
$url=str_replace("'","-",$url);
$url=str_replace("$","dollar",$url);
$url=str_replace("©","copyright",$url);
$url=str_replace("®","registred",$url);
$url=str_replace("œ","oe",$url);
$url=str_replace("æ","ae",$url);
$url=str_replace("Š","s",$url);
$url=str_replace("š","s",$url);
$url=str_replace("Ÿ","y",$url);

//-- Adaptation
$url = strtolower($url);
$url=str_replace("--","-",$url);
$url=str_replace("--","-",$url);
return $url;
}

Si j'en ai oublié, vous me le dites ;)

Bonne soirée,
Et merci !

urlencode ? O_o
note : les espaces sont remplacés par des + (raisons historique, cf doc)

codimix
Auteur

Merci de ta réponse, mais ce n'est pas ce que je recherche.

C'est plutôt pour transformer http://mondomaine.fr/AveC Pl&in dE çaractères___s-- .html
en http://mondomaine.fr/cheene-avec-plein-de-caracteres-s.html

Ce n'est pas les paramètres GET.

Merci d'avance,
I.

ha je vois ce que tu veux... pour tes caracteres accentués, regarde avec un tableau associatif pour remplacer pour les espaces, c'est facile, un simple str_replace et pour une sorte de dictionnaire (passer de Pl&in à plein c'est pas simple) je sais pas...
ha et pour passer tout en minuscules : strtolower suffit :)