août 10



Voici une petite fonction qui permet de formater et nettoyer une chaîne pour l’URL Rewriting en PHP.

Exemple:

Avant  nettoyage: C’ était en réalité un fake !

Après nettoyage : c-etait-en-realite-un-fake

Si il n’y a pas de preg_replace() mais plutôt des strtr() et des str_replace() c’est simplement pour des raisons de rapidité, en effet cette fonction est la plus-part du temps appelée de très nombreuses fois dans une pages, il est donc préférable qu’elle soit optimisée!

Cette fonction gère aussi les chaîne encodées en UTF8.

1
2
3
4
5
6
7
8
9
function formater_url($url){
    $url = utf8_decode($url);
    $url = strtolower(strtr($url, utf8_decode('ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ()[]\'"~$&%*@ç!?;,:/\^¨€{}<>|+.- '),  'aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn    --      c  ---    e       --'));
    $url = str_replace(' ', '', $url);
    $url = str_replace('---', '-', $url);
    $url = str_replace('--', '-', $url);
    $url = trim($url,'-');
    return $url;
}

Post to Twitter Twitter ce post

Mots-clefs :, , ,

2 Responses to “Formater et nettoyer une chaîne pour l’URL Rewriting en PHP”

  1. Thierry Says:

    Salut,

    J’ai utilisé également une fonction basée sur « str_replace », mais maintenant, j’utilise plutôt celle-ci, qui permet d’éviter quelques erreurs :


    function urlChars( $url, $type = '' ) {
    $url = preg_replace("`\[.*\]`U","",$url);
    $url = preg_replace('`&(amp;)?#?[a-z0-9]+;`i','-',$url);
    $url = htmlentities($url, ENT_NOQUOTES, 'utf-8');
    $url = preg_replace( "`&([a-z])(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig);`i","\\1", $url );
    $url = preg_replace( array("`[^a-z0-9]`i","`[-]+`") , "-", $url);
    $url = ( $url == "" ) ? $type : strtolower(trim($url, '-'));
    return $url;
    }

    Je vous laisse juger :)

    T.

  2. admin Says:

    Salut Thierry,
    Merci pour cette contribution!
    je viens de tester cette fonction et elle donne aussi un très bon résultat, j’étais moi aussi parti sur une fonction avec des preg_replace(), mais comme j’utilise cette fonction quelques centaines de fois sur certaines pages, j’ai décidé de l’optimiser et j’ai constaté que les str_replace() et strtr() étaient plus rapide .

    Exemple sur 1000 itérations:
    Fonction avec str_replace() : 0.018678903579712
    Fonction avec preg_replace() : 0.053956031799316

    j’ai donc préféré la rapidité, même si j’ aurais préféré ta fonction si je ne devais traiter les URL qu’une seule fois.

Leave a Reply