Texte propre pour une url ?

Résolu
porciner Messages postés 56 Date d'inscription mardi 22 juin 2004 Statut Membre Dernière intervention 18 avril 2008 - 24 févr. 2007 à 13:18
cs_christobal Messages postés 208 Date d'inscription jeudi 3 octobre 2002 Statut Membre Dernière intervention 31 mars 2011 - 26 févr. 2007 à 20:25
Bonjour,

J'ai fais une fonction qui permet de dénuer une chaine de ses caractères spéciaux et autres caractères nuisibles lorsque l'on veut ajouter cette chaine dans une url.

Le problème c'est que ma fonction est vraiment longue et je me demande s'il existe un autre moyen (avec les expressions régulières par exemple) de raccourcir celle-ci :

<tt style="FONT-SIZE: 9pt">function cleanStrForUrl($str)
{
    $str = trim($str);
    
    $str = str_replace(' ', '_', $str);
    $str = str_replace('\'', '_', $str);
    $str = str_replace('-', '_', $str);
    $str = str_replace('&', 'et', $str);
    
    $str = str_replace('Á', 'a', $str);
    $str = str_replace('á', 'a', $str);
    $str = str_replace('Â', 'a', $str);
    $str = str_replace('â', 'a', $str);
    $str = str_replace('Æ', 'ae', $str);
    $str = str_replace('æ', 'ae', $str);
    $str = str_replace('À', 'a', $str);
    $str = str_replace('à', 'a', $str);
    $str = str_replace('Å', 'a', $str);
    $str = str_replace('å', 'a', $str);
    $str = str_replace('Ã', 'a', $str);
    $str = str_replace('ã', 'a', $str);
    $str = str_replace('Ä', 'a', $str);
    $str = str_replace('ä', 'a', $str);

    $str = str_replace('Ç', 'c', $str);
    $str = str_replace('ç', 'c', $str);

    $str = str_replace('É', 'e', $str);
    $str = str_replace('é', 'e', $str);
    $str = str_replace('Ê', 'e', $str);
    $str = str_replace('ê', 'e', $str);
    $str = str_replace('È', 'e', $str);
    $str = str_replace('è', 'e', $str);
    $str = str_replace('Ë', 'e', $str);
    $str = str_replace('ë', 'e', $str);
    $str = str_replace('?', 'e', $str);
    
    $str = str_replace('Í', 'i', $str);
    $str = str_replace('í', 'i', $str);
    $str = str_replace('Î', 'i', $str);
    $str = str_replace('î', 'i', $str);
    $str = str_replace('¡', 'i', $str);
    $str = str_replace('Ì', 'i', $str);
    $str = str_replace('ì', 'i', $str);
    $str = str_replace('Ï', 'i', $str);
    $str = str_replace('ï', 'i', $str);
    
    $str = str_replace('Ñ', 'n', $str);
    $str = str_replace('ñ', 'n', $str);
    
    $str = str_replace('Ó', 'o', $str);
    $str = str_replace('ó', 'o', $str);
    $str = str_replace('Ô', 'o', $str);
    $str = str_replace('ô', 'o', $str);
    $str = str_replace('Œ', 'oe', $str);
    $str = str_replace('œ', 'oe', $str);
    $str = str_replace('Ò', 'o', $str);
    $str = str_replace('ò', 'o', $str);
    $str = str_replace('Õ', 'o', $str);
    $str = str_replace('õ', 'o', $str);
    $str = str_replace('Ö', 'o', $str);
    $str = str_replace('ö', 'o', $str);
    
    $str = str_replace('Š', 's', $str);
    $str = str_replace('š', 's', $str);
    
    $str = str_replace('Ú', 'u', $str);
    $str = str_replace('ú', 'u', $str);
    $str = str_replace('Û', 'u', $str);
    $str = str_replace('û', 'u', $str);
    $str = str_replace('Ù', 'u', $str);
    $str = str_replace('ù', 'u', $str);
    $str = str_replace('Ü', 'u', $str);
    $str = str_replace('ü', 'u', $str);
    
    $str = str_replace('Ý', 'y', $str);
    $str = str_replace('ý', 'y', $str);
    $str = str_replace('Ÿ', 'y', $str);
    $str = str_replace('ÿ', 'y', $str);
        
    $str = strtolower($str);
    
    $len = strlen($str);
    
    for ($i = 0; $i < $len; $i++)
    {
        if (!ereg('[-_0-9a-z]+', $str{$i}))
        {
            $str = str_replace($str{$i}, '', $str);
            
            $len = strlen($str);
        }
    }

    
    while(!ereg('[0-9a-z]+', $str{0}))
    {
        $str = substr($str, 1, $len);
    } 

    $len = strlen($str);
    
    while(!ereg('[0-9a-z]+', $str{$len-1}))
    {
        $str = substr($str, 0, $len-1);
        
        $len = strlen($str);
    }
    
    $str = str_replace('__', '_', $str);
    
    return $str;
}
</tt>

Merci à vous.

4 réponses

cs_christobal Messages postés 208 Date d'inscription jeudi 3 octobre 2002 Statut Membre Dernière intervention 31 mars 2011
26 févr. 2007 à 14:45
Si j'ai bien compris, tu veux réécrire une chaine pour en faire une url propre ?
Si c'est le cas je te conseil d'utiliser ces trois fonction
$char = htmlentities(stripslashes(strtolower($chaine)),ENT_QUOTES) ;
+ str_replace.
Attention celas converti les lettres accentué et autre symbole. Donc revoi l'écriture de ton str_replace. (&agrave; a) et non (à a)
de plus utilise un array plutôt que de faire autant de str_replace que du lettres
3
vilhjalms Messages postés 591 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 16 juillet 2009 2
24 févr. 2007 à 14:16
Saell og blesuð

voir urlencode()

Vilhjálms
Sigurðsdóttir aka Frëyjá
0
vilhjalms Messages postés 591 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 16 juillet 2009 2
26 févr. 2007 à 16:24
Saell og blesuð

Ouais enfin un urlencode() puis un urldecode() reste plus simple selon moi

cf la doc : http://fr.php.net/manual/fr/function.urlencode.php


Vilhjálms
Sigurðsdóttir aka Frëyjá
0
cs_christobal Messages postés 208 Date d'inscription jeudi 3 octobre 2002 Statut Membre Dernière intervention 31 mars 2011
26 févr. 2007 à 20:25
Ok mais quand tu regarde sa fonction, se qu'il cherche a faire c'est comme les urls de phpcs.
Alors que urlencode génére de nouveaux caracter comme le + pour les espaces et les pourcentage pour les caractere non alpha numerique.
0
Rejoignez-nous