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 :

preg_replace et accent : Résultat étonnant [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 54
    Points : 76
    Points
    76
    Par défaut preg_replace et accent : Résultat étonnant
    Bonjour, dans un script PHP, je veux remplacer des mots par des liens vers les fiches de ces mots. Tout est ok, tout fonctionne sauf un petit bug sur les mots accentués.

    En simplifiant le tout, voilà un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $texte = 'martin martine martinez gagné gagnée gagnées pétard pétarde';
     
    $texte = preg_replace('#\bmartin\b#', 'ok1', $texte);
    $texte =  preg_replace('#\bgagné\b#', 'ok2', $texte);
    $texte =  preg_replace('#\bgagnée\b#', 'ok3', $texte);
    $texte =  preg_replace('#\bpétard\b#', 'ok4', $texte);
     
    //Affiche : ok1 martine martinez gagné ok2e ok2es ok4 pétarde
    echo $texte;
    En gros, je veux que :
    - "martin" (et pas "martine" et "martinez") soit remplacé par "ok1"
    - "gagné" (et pas "gagnée" et "gagnées" soit remplacé par "ok2"
    - "gagnée" soit remplacé par "ok3"
    - "pétard" (et pas "pétarde") soit remplacé par "ok4"

    Le code ci-dessus me semble bon. Les \b \b permettent d'éviter justement que martine et martinez soit changés en ok1.

    Pour "martin" et "pétard", tout se passe comme je peux.

    Mais pour "gagné", ça déconne. Le mot qui devrait être pris en compte ne l'est pas. Pire, les mots qui ne devraient pas être pris en compte (grâce au \b \b), le sont !

    Quelqu'un a une idée, une piste ? Merci d'avance.

  2. #2
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    Problème d'encodage certainement.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 54
    Points : 76
    Points
    76
    Par défaut
    L'encodage aurait une incidence sur un mot se terminant par un accent, et pas sur celui où l'accent est au milieu ?!

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    En effet bizarre :\

    Je viens de tester et j'ai le même comportement que toi.

    Je ne vois pas trop ce qui induit ce phénomène.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 54
    Points : 76
    Points
    76
    Par défaut
    C'est là que je suis étonné. J'imagine que je ne suis pas le premier à vouloir faire ça !

  6. #6
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    En consultant les coms de la doc, ce problème est en effet connu.
    http://fr3.php.net/manual/fr/referen...ntax.php#54830

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 54
    Points : 76
    Points
    76
    Par défaut
    En mettant \W à la place de \b, ça fonctionne, mais...... ça me vire le caractère précédent et le caractère suivant... donc la galère ensuite.

  8. #8
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    Il suffit de faire des captures.

    Pas génial, c'est vrai.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 54
    Points : 76
    Points
    76
    Par défaut
    Bon, en remplaçant :
    par :

    ça fonctionne !

    Merci à ceux qui m'ont aidé !

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 54
    Points : 76
    Points
    76
    Par défaut
    Comment déterrer son propre topic !

    Changement de serveur, retour du problème !

    Ancien serveur : PHP 5.2.9
    Nouveau serveur : PHP 5.2.13
    Pour info, sur mon serveur de dev. le problème existe aussi (PHP 5.2.6)

    Si quelqu'un a une piste...

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

Discussions similaires

  1. Fonction preg_replace et accents
    Par Softdaemon dans le forum Langage
    Réponses: 6
    Dernier message: 15/07/2011, 10h27
  2. [RegEx] preg_replace et accents : encore un problème
    Par jgautier dans le forum Langage
    Réponses: 5
    Dernier message: 08/12/2009, 15h02
  3. osql : accents dans fichier résultats
    Par frenchy371 dans le forum Outils
    Réponses: 2
    Dernier message: 27/10/2008, 18h24
  4. rewriting / Erreur d'URL.. un résultat étonnant
    Par Joe Le Mort dans le forum Dépannage et Assistance
    Réponses: 2
    Dernier message: 10/08/2006, 10h09

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