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 :

Passage eregi_replace vers preg_replace [RegEx]


Sujet :

Langage PHP

  1. #21
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 307
    Points : 87
    Points
    87
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Bonjour,

    tant qu'à mettre le code/site à jour :

    Bonjour,

    Alors dans la balise meta de mon fichier HTML j'ai :

    Après c'est vrai que je n'ai pas tout le contenu.
    Pour la page PHP je l'ai bien rajouté par contre pour le serveur c'est une base Oracle et là..

  2. #22
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 307
    Points : 87
    Points
    87
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    C'est bien étrange, essaie ce petit test (place le avant le code en question et toute conversion) et poste le résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    preg_match_all('~\bparam\S+trage\b~', $info, $matches);
    foreach ($matches[0] as $m) {
        echo PHP_EOL, '<br>';
        for ($i=0; $i<strlen($m); $i++) {
            echo dechex(ord($m[$i])), ' ';
        }
    }
    Puis ensuite teste le après la conversion de $info (et poste le résultat également).
    Bonjour CosmoKnacki,

    Alors avant toute conversion ça donne ça :


    <br>70 61 72 61 6d c3 a9 74 72 61 67 65
    <br>70 61 72 61 6d c3 a9 74 72 61 67 65
    <br>70 61 72 61 6d c3 a9 74 72 61 67 65
    <br>70 61 72 61 6d c3 a9 74 72 61 67 65
    <br>70 61 72 61 6d c3 a9 74 72 61 67 65
    <br>70 61 72 61 6d c3 a9 74 72 61 67 65
    <br>70 61 72 61 6d c3 a8 74 72 61 67 65
    <br>70 61 72 61 6d 65 74 72 61 67 65
    <br>70 61 72 61 6d 65 74 72 61 67 65
    <br>70 61 72 61 6d c3 a9 74 72 61 67 65
    <br>70 61 72 61 6d c3 a9 74 72 61 67 65
    <br>70 61 72 61 6d c3 a9 74 72 61 67 65
    <br>70 61 72 61 6d c3 a9 74 72 61 67 65
    et après la conversion ça donne ça :

    <br>70 61 72 61 6d c3 83 c2 a9 74 72 61 67 65
    <br>70 61 72 61 6d c3 83 c2 a9 74 72 61 67 65
    <br>70 61 72 61 6d c3 83 c2 a9 74 72 61 67 65
    <br>70 61 72 61 6d c3 83 c2 a9 74 72 61 67 65
    <br>70 61 72 61 6d c3 83 c2 a9 74 72 61 67 65
    <br>70 61 72 61 6d c3 83 c2 a9 74 72 61 67 65
    <br>70 61 72 61 6d c3 83 c2 a8 74 72 61 67 65
    <br>70 61 72 61 6d 65 74 72 61 67 65
    <br>70 61 72 61 6d 65 74 72 61 67 65
    <br>70 61 72 61 6d c3 83 c2 a9 74 72 61 67 65
    <br>70 61 72 61 6d c3 83 c2 a9 74 72 61 67 65
    <br>70 61 72 61 6d c3 83 c2 a9 74 72 61 67 65
    <br>70 61 72 61 6d c3 83 c2 a9 74 72 61 67 65

  3. #23
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Donc $info est déjà en UTF8. Il n'est pas nécessaire de le convertir. Retire les iconv pour $info laisse les autres pour le moment et regarde ce que ça donne.

    Maintenant il faut tester le tableau: place avant et après la conversion de $value:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ($key=='param') {
        echo PHP_EOL, '<br>';
        for ($i=0;$i<strlen($value);$i++) { echo dechex(ord($value[$i])), ' '; }
    }
    Vérifie aussi si le tableau contient plusieurs entrées dont la clef commence par "param" (dans n'importe quelle casse).
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  4. #24
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 307
    Points : 87
    Points
    87
    Par défaut
    Ok ça marche, j'ai toujours le problème.
    Avant conversion ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <br>30 31 32 33 34 35 36 37 38 39 31 
    <br>30 31 32 33 34 35 36 37 38 39 31 
    <br>30 31 32 33 34 35 36 37 38 39 31 
    <br>30 31 32 33 34 35 36 37 38 39 31 
    <br>30 31 32 33 34 35 36 37 38 39 31 
    <br>30 31 32 33 34 35 36 37 38 39 31 
    ..
    Après conversion ça donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <br>30 31 32 33 34 35 36 37 38 39 31 
    <br>30 31 32 33 34 35 36 37 38 39 31 
    <br>30 31 32 33 34 35 36 37 38 39 31 
    <br>30 31 32 33 34 35 36 37 38 39 31 
    <br>30 31 32 33 34 35 36 37 38 39 31 
    <br>30 31 32 33 34 35 36 37 38 39 31 
    ..
    C'est donc identique .
    J'ai vérifié et je n'ai qu'un seul param

  5. #25
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Désolé j'ai marqué $i au lieu de $value[$i], j'ai corrigé depuis.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  6. #26
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 307
    Points : 87
    Points
    87
    Par défaut
    Bonjour CosmoKnacki,

    Alors du coup avant conversion ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <br>70 61 72 61 6d 65 74 72 61 67 65 
    <br>70 61 72 61 6d 65 74 72 61 67 65 
    <br>70 61 72 61 6d 65 74 72 61 67 65 
    <br>70 61 72 61 6d 65 74 72 61 67 65 
    <br>70 61 72 61 6d 65 74 72 61 67 65 
    <br>70 61 72 61 6d 65 74 72 61 67 65 
    ..
    Et après conversion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <br>70 61 72 61 6d 65 74 72 61 67 65 
    <br>70 61 72 61 6d 65 74 72 61 67 65 
    <br>70 61 72 61 6d 65 74 72 61 67 65 
    <br>70 61 72 61 6d 65 74 72 61 67 65 
    <br>70 61 72 61 6d 65 74 72 61 67 65 
    <br>70 61 72 61 6d 65 74 72 61 67 65 
    <br>70 61 72 61 6d 65 74 72 61 67 65 
    <br>70 61 72 61 6d 65 74 72 61 67 65 
    ..
    Les données sont identiques ça veut dire que c'est bien en UTF-8 ?

  7. #27
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    On ne peut rien conclure de ce dernier test car la valeur de remplacement est "parametrage" (sans accent) donc tous les caractères du mot sont dans la plage ascii (de 0 à 7F) que les différents encodages ont en commun.

    Je pense que ton tableau est codé en dur dans le code (i.e. il ne provient pas d'une base de données ou d'un fichier), est-ce bien le cas? Si oui, avec ton éditeur de code fait "enregistrer sous" et vérifie dans la fenêtre que l'encodage du fichier est bien UTF-8, si c'est ISO8859-bidule ou Windows-machintruc change pour UTF-8 (change aussi le nom du fichier pour faire des tests dessus sans écraser l'autre). Si ton éditeur ne te permet pas de faire ça, utilises en un autre comme notepad++. (Tu dois pouvoir aussi savoir quel est l'encodage du fichier, avec un truc du genre information fichier.)

    Il faut aussi vérifier que la coquille n'est pas déjà dans le texte d'origine! Donc part à la recherche d'éventuels "paramétragetre" ou assimilé avant toute modification.

    regex et utf-8:
    • vérifie que tu as bien utilisé le modificateur "u" (en minuscule) et non pas "U" (en majuscule) dans la pattern ce qui est totalement différent.
    • Il est possible, bien que peu probable que pcre ait été compilé sans le support UTF8 (ça peut ce vérifier avec var_dump(preg_match("~\A\w\z~u", "\xC3\xA9"));, si le résultat est int(0), il n'y a pas de support de l'UTF8).
    • avec l'unicode, bien que je doute que ce soit le cas ici, une lettre accentuée comme par exemple le "é" peut être représentée de deux manières, soit avec le caractère [LATIN SMALL LETTER E WITH ACUTE](directement le e accent aigu), soit par la combinaison de deux caractères, [LATIN SMALL LETTER E] (un "e" normal) auquel on ajoute le caractère [COMBINING ACUTE ACCENT](l'accent). Or ce [COMBINING ACUTE ACCENT] ne fait pas partie de la classe \w ce qui peut être source d'erreurs, la parade consiste à remplacer \w par [\pL\pM] (deux classes qui contiennent respectivement les lettres et les caractères combinants).


    Voilà après je ne vois pas vraiment d'autres pistes. Après d'une manière plus générale, pour se sortir de ce genre de problème, il faut vérifier l'encodage de tous les éléments (code source, base de données, fichiers de données externe...) et adopter l'UTF8 partout si ce n'est déjà fait. Le travail de fond permet de lever les derniers lièvres qui résistent.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  8. #28
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 307
    Points : 87
    Points
    87
    Par défaut
    Merci pour ta réponse
    Alors il me ressort int(0), il y a quelque chose à faire pour qu'il supporte l'UTF-8.
    Sinon si je remplace \w par [\pL\pM] je n'ai plus le paramétragetre par contre les éléments accentués de $value ressortent mal

  9. #29
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Alors il me ressort int(0), il y a quelque chose à faire pour qu'il supporte l'UTF-8.
    Ahah! Alors là je suis sur le cul, je savais que c'était possible, mais je n'avais jamais encore rencontré le cas.
    Pour avoir PCRE avec le support de l'UTF8 réinstalle PHP, il est normalement livré avec une version compilée de libpcre avec le support de l'UTF8 par défaut. (Si tu es sous linux/unix, tente de réinstaller le paquet libpcre d'abord pour avoir la version par défaut du dépôt.)

    Sinon si je remplace \w par [\pL\pM] je n'ai plus le paramétragetre par contre les éléments accentués de $value ressortent mal
    Qu'entends tu par "ressortent mal", ça ressemble à quoi?
    As-tu testé en virant tous les iconv?
    Est-ce que ton code PHP envoie une entête HTTP avec l'encodage? (un truc du genre: header('Content-Type: text/html; charset=utf-8');) ou alors est ce que le fichier html produit contient entre les balises <head></head> soit une balise <meta charset="UTF-8"> (dans le cas du html5), soit <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />(pour du xhtml) afin d'informer le navigateur de l'encodage utilisé?
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  10. #30
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 307
    Points : 87
    Points
    87
    Par défaut
    Alors je n'ai pas la main sur le serveur mais je vais essayer de voir ça merci .

    Mon PHP renvoie ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Content-Type:application/json; ; charset=utf-8
    , c'est normal car c'est un WS qui me ressort du json et j'ai bien le dans mon fichier HTML.
    Si je retire les conversions l'utilisation de résout le problème.

    Merci beaucoup pour ton aide en tout cas.

    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Probléme passage vb6 vers vb Net
    Par dieuzorro dans le forum VB.NET
    Réponses: 3
    Dernier message: 25/04/2007, 12h56
  2. passage mpd vers mcd
    Par walid0577 dans le forum PowerAMC
    Réponses: 1
    Dernier message: 03/04/2007, 09h46
  3. [AVIS] Passage AOL vers NEUF
    Par mr_samy81 dans le forum Dépannage et Assistance
    Réponses: 3
    Dernier message: 21/01/2007, 18h45
  4. Passage état vers Word
    Par lokal64 dans le forum Access
    Réponses: 1
    Dernier message: 28/04/2006, 11h53
  5. Pb Form/sous Form du passage NT vers XP...
    Par toyyo dans le forum IHM
    Réponses: 2
    Dernier message: 25/11/2005, 17h45

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