Typhon,
il y a 14 ans
Y a des fois comme a ou on a du mal =S ^^
J'ai finis par corriger mon problème tout seul.
Pour ceux que ça intéresse voilà la version Finale.
/**
* Permet de transformer une chaine de caractères en sont équivalent "slug"
* @param string $str : Chaine à transformer
* @return string : Slug de la chaine
**/
function str2slug($str) {
$str = htmlentities($str, ENT_NOQUOTES, 'utf-8');
$str = preg_replace('#\&([A-Za-z])(?:grave|acute|circ|tilde|uml|ring|cedil)\;#', '\1', $str);
$str = preg_replace('#\&([A-Za-z]{2})(?:lig)\;#', '\1', $str);
$str = str_replace("'", '-', $str);
$str = str_replace(' ', '-', $str);
$str = preg_replace('#[^A-Za-z0-9-]#', '', $str);
$str = str_replace('--', '-', $str);
$str = strtolower($str);
$str = trim($str, '-');
return $str;
}
Testé et approuvé (Enfin j’espère) =D
EDIT : Function v2
function slug($str) {
// Convertit tous les caractères en entités html
$str = htmlentities($str, ENT_NOQUOTES, 'utf-8');
// Déspécialise tous les caractères déspécialisables (ex. é->e, œ -> oe, ç->c ou encore ñ->n)
$str = preg_replace('/\&([A-Za-z])(?:grave|acute|circ|tilde|uml|ring|cedil)\;/', '$1', $str);
$str = preg_replace('/\&([A-Za-z]{2})(?:lig)\;/', '$1', $str);
// Supprime tous les caractères non déspécialisables (ex. & = &)
$str = preg_replace('/\&([A-Za-z]*)\;/', '', $str);
// Remplace tous autres caractères différent d'une lettre, d'un chiffre ou du délimiteur par le délimiteur
$str = preg_replace('/[^A-Za-z0-9-]/', '-', $str);
// Supprime les doublons de délimiteur
$str = preg_replace('/[-]{2,}/', '-', $str);
// Convertit la chaine en minuscule
$str = strtolower($str);
// Suprime les délimiteurs en début et fin de chaine
$str = trim($str, '-');
return $str;
}