PHP Function format a string in URL and remove accents - Fonction PHP pour formater une chaîne en URL et supprimer les accents
Publié le .
[EN] I needed to rewrite article titles as URLs. I created this function which transforms accented letters into unaccented letters and separates words with hyphens. [FR] J'ai eu besoin de réécrire des titres d'articles sous forme d'URL. J'ai crée cette fonction qui transforme les lettres accentuées en lettres non-accentuées et qui sépare les mots par des tirets.
// ! Note: Be careful when using this function, it does not guarantee any results and may contain errors
/**
* format_in_URL( $str, $encoding='utf-8' );
*
* @param {string} $str string to transform in url string
* @param {encoding} $encoding 'utf-8'
* @return {string} string url formatted
*/
function format_in_URL( $str, $encoding='utf-8' ){
$str = trim($str);
// transform accented characters into HTML entities
$str = htmlentities($str, ENT_NOQUOTES, $encoding);
// replace HTML entities to have just the first unaccented character
// Exemple : "&ecute;" => "e", "&Ecute;" => "E", "à" => "a" ...
$str = preg_replace('#&([A-za-z])(?:acute|grave|cedil|circ|orn|ring|slash|th|tilde|uml);#',
'\1', $str);
// Replace ligatures such as : , Æ ...
// Exemple "œ" => "oe"
$str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str);
// Delete everything else
$str = preg_replace('#&[^;?]+;#', "", $str);
$str = preg_replace('#\?+$#', "", $str);
$str = preg_replace('#\!{1,}#', "", $str);
$str = preg_replace('#\,{1,}#', "", $str);
$str = preg_replace("#['\s]+#", "-", $str);
$str = preg_replace('#\.{1,}#', "", $str);
$str = preg_replace('#-{2,}#', "-", $str);
$str = preg_replace('#-{1,}$#', "", $str);
return $str;
}
/**
* end format_in_URL( $str, $encoding='utf-8' );
*/
// Ex: $str = "Lætitia a une poussière dans l'œuil";
// echo format_in_URL( $str, $encoding='utf-8' );
// Output : Laetitia-a-une-poussiere-dans-l-oeuil
Mots clés : PHP, formater une chaîne en URL, supprimer les accents dans une chaîne de caractères, format a string as a URL, remove accents from a string