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

Langage PHP Discussion :

Résultat bizarre de mon preg_replace : doublement des e [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de thecanea
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 131
    Par défaut Résultat bizarre de mon preg_replace : doublement des e
    Bonjour à tous,

    Je reste perplexe devant le résultat obtenu...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function NomToCodeUrl($in) {
    	$search = array ('@[éèêëÊË]@i','@[àâäÂÄ\@]@i','@[îïÎÏ]@i','@[ûùüÛÜ]@i','@[ôöÔÖ]@i','@[ç]@i','@[ ]@i','@[^a-zA-Z0-9_-]@');
    	$replace = array ('e','a','i','u','o','c','-','');
    	//la fonction rtrim supprime les espaces en fin de chaine
    	return rtrim(preg_replace($search, $replace, $in));
    }
    Ma fonction est censé prendre une String et la convertir :
    Exemple attendu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $StringEntree = "Il était une fois @ l'ouest";
    $StringSortie = "Il-etait-une-fois-a-louest";
    Hors le problème c'est que j'obtiens : 'Il-eetait-une-fois-a-louest'

    J'obtiens un doublement des e

    Et par exemple si je passe 'für' j'obtiens : 'feur'... au lieu de 'fur' !

    Bizarre...

    Et quand je modifie $replace = array ('e','a','i','u','o','c','-',''); en $replace = array ('','a','i','u','o','c','-',''); je n'ai plus le doublement des e, mais j'ai pu de e à la place des éèëê...

    Une idée ??

    Merci d'avance, là je ne vois pas...

    Cordialement,

    Thec

  2. #2
    Membre expérimenté
    Avatar de Tesing
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Par défaut
    Salut,

    ton fichier .php est sans doute encodé en utf8, encode le en latin-1 et essaye, chez moi ca marche.

  3. #3
    Membre confirmé Avatar de thecanea
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 131
    Par défaut
    Ah ouai.. Le problème c'est que tout le projet est en utf-8... Si je mets mon fichier qui comporte ma fonction en Iso, je n'ai plus le problème avec le doublement de e, mais je n'ai plus de e du tout...

    Une solution ?

  4. #4
    Membre expérimenté
    Avatar de Tesing
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Par défaut
    ben PHP ne supporte pas encore l'unicode, c'est pour la version 6 !

    mais il y a des solutions !

    Les fonctions utf8_decode et utf8_encode, présentes par défaut, n'ont pas l'air de faire l'affaire.

    Il me semble bien qu'il faille passer par une librairie, c'est a dire iconv, qui permet de convertir les chaines de caractères.

    http://fr.php.net/manual/fr/function.iconv.php

  5. #5
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    héhé, encore une occasion de placer ma fonction de nettoyage des accents...

    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
     
    <?php
    function NomToCodeUrl($in) {
        $in = remove_accents($in);
        $search = array ('@[éèêëÊË]@i','@[àâäÂÄ\@]@i','@[îïÎÏ]@i','@[ûùüÛÜ]@i','@[ôöÔÖ]@i','@[ç]@i','@[ ]@i','@[^a-zA-Z0-9_-]@');
        $replace = array ('e','a','i','u','o','c','-','');
        //la fonction rtrim supprime les espaces en fin de chaine
        return rtrim(preg_replace($search, $replace, $in));
    }
     
    function remove_accents($str, $charset='utf-8') {
     
        $str = htmlentities($str, ENT_NOQUOTES, $charset);
     
        $str = preg_replace('#\&([A-za-z])(?:acute|cedil|circ|grave|ring|tilde|uml)\;#', '\1', $str);
        $str = preg_replace('#\&([A-za-z]{2})(?:lig)\;#', '\1', $str); // pour les ligatures e.g. '&oelig;'
        $str = preg_replace('#\&[^;]+\;#', '', $str); // supprime les autres caractères
     
        return $str;
    }
     
    $StringEntree = "Il était une fois @ l'ouest";
    $StringSortie = "Il-etait-une-fois-a-louest";
     
    print NomToCodeUrl($StringEntree);

  6. #6
    Membre confirmé Avatar de thecanea
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 131
    Par défaut
    Bon bin j'aurais même pas eu le temps d'aller voir

    Ca marche parfaitement !!

    Merci à tous, et à s.n.a.f.u... La solution est propre rapide et efficace !

    Bonne fin de semaine, c'est résolu^^

  7. #7
    Membre confirmé Avatar de thecanea
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 131
    Par défaut
    Ok, merci... Je vais regarder de ce côté et je reviendrai vous tenir au courant

    Merci pour la piste !

    Cdlmt,

    Thec

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/04/2009, 09h04
  2. Référencement de mon site : disparu des résultats
    Par zimage dans le forum Référencement
    Réponses: 1
    Dernier message: 21/02/2009, 12h45
  3. requête avec jointure qui renvoie des résultats bizarres
    Par Canari74 dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 20/05/2008, 02h13
  4. mon projet a des erreurs please help :)
    Par babemagus dans le forum MFC
    Réponses: 5
    Dernier message: 15/06/2005, 13h40
  5. [expression régulière] mon cerveau fait des noeuds..
    Par nawac dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 27/05/2003, 10h06

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