SNS - Web et informatique SNS - Web et informatique
Mardi 10 septembre 2024 13:39 Votre adresse IP est : 34.231.180.210
Logo

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