IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

transformer url sans les accents [Fait] [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Points : 120
    Points
    120
    Par défaut transformer url sans les accents
    Bonjour,

    Je cherche comment supprimer les accents dans mes url (en conservant les accents dans les infos qui s'affichent sur la page)

    Ce code va chercher l'url $ville dans la base
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="'.$page->path.'mon-dossier-'.strtr($ville,' ','-').'.htm">'.$ville.'</a>
    Si j'utilise la fonction
    .strtr($ville,'éè','ee')
    Je supprime les accents dans l'url mais la base répond "connexion impossible" puisque je recherche $ville sans accents dans la base et $ville sans accents n'existe pas dans la base !!!

    Mon problème est de supprimer les accents de $ville dans l'url après avoir récupérer l'information dans la base

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2008
    Messages : 215
    Points : 170
    Points
    170
    Par défaut
    Bonjour,

    Fonction qui permet d'optimiser une chaine de caractère pour la placer dans une url :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    function OptimiseUrl($chaine)
    {
       $chaine = strtolower(strtr($chaine,'àâäåãáçéèêëïîìíñöôóòõùûüúÿ', 'aaaaaaceeeeiiiinooooouuuuy')); //Remplacement des caractères accentués par leurs équivariants non accentués
       $chaine = preg_replace('#[^a-z0-9_-]#','-',$chaine); //Remplace tous les caractères non alphanumérique par un tiret
       while (strpos($chaine,'--') !== false) $chaine = str_replace('--','-',$chaine); //Suppression des tiret en trop
       return $chaine;
    }
    ?>
    Et ton code deviendra (sauf erreur de ma part bien sur):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="'.$page->path.'mon-dossier-'.OptimiseUrl($ville).'.htm">'.$ville.'</a>
    Edit : Le code source de la fonction vient du site zone-webmasters.net

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Points : 120
    Points
    120
    Par défaut
    Oui il marche ce code, mais a l'entrée dans la base, et la base ne répond pas sans les accents

    Je me demande si je ne dois pas changer un truc dans le select Mysql avec un % pour que la base accepte de répondre avec ou sans accent.

    WHERE ville LIKE \''.$url.'%\'');

    Fonctionne si je laisse les accents
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="'.$page->path.'mon-dossier-'.strtr($ville,' ','-').'.htm">'.$ville.'</a>
    dès que je les enlèvent avec ta fonction ça marche plus

    le problème c'est que ce code est sensible à la case
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE ville LIKE \''.$url.'%\'');
    Si je trouve une solution pour le rendre insensible à la case je pense que mon problème sera résolu.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Points : 120
    Points
    120
    Par défaut
    Mon problème est résolu en appelant la fonction nettoie_url dans le code ci dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     function enleve_accents($chaine) {
                    $reg = '/&(.)(acute|grave|circ|uml|cedil|ring|tilde|slash);/';
                    return preg_replace($reg, '\1', htmlentities($chaine));
            }
    function suppr_speciaux($chaine) {
                    $reg = '|(&[a-zA-Z0-9]*;)|U';
                    return preg_replace($reg, '-', $chaine);
            }
    		$texte = strtolower($texte);
    		$reg = '|([^a-z0-9]+)|';
                    $texte = preg_replace($reg, '-', $texte);
    				$texte = trim($texte, '-');
    function is_utf8($string) {
                    return !strlen(
                    preg_replace(
                      ',[\x09\x0A\x0D\x20-\x7E]'            # ASCII
                    . '|[\xC2-\xDF][\x80-\xBF]'             # non-overlong 2-byte
                    . '|\xE0[\xA0-\xBF][\x80-\xBF]'         # excluding overlongs
                    . '|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}'  # straight 3-byte
                    . '|\xED[\x80-\x9F][\x80-\xBF]'         # excluding surrogates
                    . '|\xF0[\x90-\xBF][\x80-\xBF]{2}'      # planes 1-3
                    . '|[\xF1-\xF3][\x80-\xBF]{3}'          # planes 4-15
                    . '|\xF4[\x80-\x8F][\x80-\xBF]{2}'      # plane 16
                    . ',sS',
                    '', $string));
            }				
    function nettoie_url($texte) {
                    if(is_utf8($texte))
                            $texte = utf8_decode($texte);
                    $texte = strtolower(suppr_speciaux(enleve_accents($texte)));
                    $reg = '|([^a-z0-9]+)|';
                    $texte = preg_replace($reg, '-', $texte);
                    return trim($texte, '-');
            }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/05/2013, 16h31
  2. url.openStream bousille les accentes
    Par yostane dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 11/05/2008, 22h59
  3. Réponses: 5
    Dernier message: 26/12/2007, 12h51
  4. SELECT sans les accents.
    Par macben dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/11/2005, 19h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo