Texte propre pour une url ? [Résolu]

Signaler
Messages postés
56
Date d'inscription
mardi 22 juin 2004
Statut
Membre
Dernière intervention
18 avril 2008
-
Messages postés
208
Date d'inscription
jeudi 3 octobre 2002
Statut
Membre
Dernière intervention
31 mars 2011
-
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

Messages postés
208
Date d'inscription
jeudi 3 octobre 2002
Statut
Membre
Dernière intervention
31 mars 2011

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
Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
16 juillet 2009
2
Saell og blesuð

voir urlencode()

Vilhjálms
Sigurðsdóttir aka Frëyjá
Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
16 juillet 2009
2
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á
Messages postés
208
Date d'inscription
jeudi 3 octobre 2002
Statut
Membre
Dernière intervention
31 mars 2011

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.