Salagir's Blog

Old name was: "Why do witches burn?"

This is french section. Go to English version

Url rewriting est ton ami

Le avril 27th, 2008

L’url rewriting, c’est l’art d’avoir un lien vers une page web qui soit lisible par des humains, et surtout des moteurs de recherche.

C’est très utilisé par les blogs, qui mettent le titre de l’article dans l’url.

Exemple :
Bon : http://toto.com/articles/mon-jeu-prefere-de-supernintendo.html
Mauvais : http://toto.com/2007/article.php?id=684

On remarque que les accents sont aussi transformés, car une url avec accent, c’est moche, en effet on ne voit pas l’accent mais son équivalent encodé, car oui, du point de vue d’une url, un accent c’est un caractère spécial.

Mauvais : http://toto.com/articles/mon-jeu-pr%E9f%E9r%E9-de-supernintendo.html
Mauvais : http://toto.com/articles/mon-jeu-prfr-de-supernintendo.html

Notez que certains mauvais algo virent tout simplement les accents, et on perd aussi le mot. Le problème se pose aussi avec une apostrophe :

Mauvais : http://toto.com/articles/sauvez-l%27oiseau.html
Mauvais : http://toto.com/articles/sauvez-loiseau.html
Bon : http://toto.com/articles/sauvez-l-oiseau.html

Il y a d’autres délires que j’ai vu comme des noms de page qui commencent ou finissent par des tirets (ce qui est moche)…

J’ai fais mon algo perso de rewriting, et je vous le donne. Utilisez-le bien.

//! Transforme un texte en nom de fichier simple et lisible
function text2filename($str, $spaceChar = '-') {
    $str = preg_replace('/[:;?!¡,~R()=%"«»]/', '', $str);
    $str = strtr($str,
        'äàáâãåÀÁÂÃÅÇçèéêëÈÉÊËìíîïÌÍÎÏÑñÒÓÔÕòóôõÙÚÛùúûÝýÿÐ',
        'aaaaaaAAAAACceeeeEEEEiiiiIIIINnOOOOooooUUUuuuYyyD');
    $str = str_replace(
        array('Ä','Æ','æ','Ö','ö','ß','Ü','ü'),
        array('AE','AE','ae','OE','oe','ss','UE','ue'), $str);
    $str = preg_replace('/[ _\'\/.-]+/', $spaceChar, $str);
    $str = trim($str, $spaceChar);
    return strtolower($str);
}

3 Responses to “Url rewriting est ton ami”

  1. Nous qui nous lançons avec le CMS SPIP, ton script va nous servir !

    Merci, je le garde sous l’aile :-)

    Khanard

  2. C’est pas mal. Par contre, j’ai dernièrement eut des soucis avec strtr qui travail directement sur les octets. Ce qui est un poil embêtant quand on bosse en UTF-8.
    Je raconte pas le bordel pour indexer une base en UTF-8 avec un moteur ISO puis un affichage des résultats en UTF-8. La joie des charset ^^

    Donc à noter qu’il peut y avoir des bugs générés simplement à cause de strtr. Certains recommandent str_replace au lieu de strtr.

    Steven

  3. Allez, tiens, même si l’article est ancien, vu que je suis retombé dessus, je vais donner ma fonction à moi (en espérant que ça casse pas l’indentationvu qu’y a pas de balises « code ») :

    function nettoieURL ($url, $sep = ‘-‘) {
    $url = strip_tags($url);

    // Remplacements spéciaux
    $patterns = array(
    ‘%’ => ‘p. 100’,
    ‘@’ => ‘ at ‘,
    );
    $url = str_replace(array_keys($patterns),array_values($patterns),$url);

    $url = strtolower($url);
    $url = htmlentities($url,ENT_QUOTES,’UTF-8’);

    // Remplacements…
    $patterns = array(
    ‘#&(.)(acute|grave|circ|uml|cedil|ring|tilde|slash|caron);#’ => ‘$1’, // … des diacritiques
    ‘#&([a-z]{2})lig;#’ => ‘$1’, // … des ligatures
    ‘#&[a-z0-9\#]*;#U’ => $sep, // … des caractères spéciaux
    ‘#[^a-z0-9]+#’ => $sep, // … du reste (parenthèses, groupes de tirets…)
    );
    $url = preg_replace(array_keys($patterns),array_values($patterns),$url);

    $url = trim($url,$sep);
    return $url;
    }

    Guenhwyvar

Leave a Reply