Bien que très simple à mettre en place dans les faits, quand vient l’heure de nettoyer une chaîne de caractères pleine d’accents, de signes de ponctuation et autres caractères spéciaux, c’est la galère.
Voici la fonction que j’utilise pour nettoyer mes chaînes de caractères et les utiliser comme permalien
function clean($string) {
$string = html_entity_decode(preg_replace('/&([a-zA-Z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);/i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8')), ENT_QUOTES, 'UTF-8');
$string = strtolower(trim(preg_replace('/[^0-9a-z]+/i', '-', $string), '-'));
return $string;
}
Le principe ici est très simple. D’abord on converti tout les caractères qui peuvent l’être en entités HTML à l’aide de la fonction htmlentities()
, ensuite on remplace chaque caractère par son équivalent sans accent, cédille, etc.
preg_replace('/&([a-zA-Z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);/i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8')), ENT_QUOTES, 'UTF-8');
En appliquant la fonction html_entity_decode()
sur la chaîne nettoyée de tout caractère accentué, on transforme à nouveau les entités HTML restantes en caractères normaux.
Enfin, on remplace tous les caractères n’étant pas des lettres ou des chiffres par un tiret, puis on supprime les tirets en trop à l’aide de la fonction trim()
.
J’espère que ce petit morceau de code vous aura été utile :).
N’hésitez pas à partager votre solution, ou vos remarques dans les commentaires.
Tchô !
Laisser un commentaire