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 :

Comparaison de chaines, mystère


Sujet :

Langage PHP

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Points : 218
    Points
    218
    Par défaut Comparaison de chaines, mystère
    Bonjour
    Je n'ai jamais eu de problème de comparaison de chaine en php, j'ai toujours utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($chaine == $chaine2){}
    Aujourd'hui je sui tombé sur un os intéressent, le problème est résolu mais je n'ai pas compris le problème (subtile).

    C'est très simple je récupère 2 valeurs issues de 2 documents xml différent, en les parssent via simpleXml.
    Lors de la comparaison de valeurs de 2 attributs (en fait une valeur direct de l'attribut et une autre d'abord stockée dans un tableau) avec la méthode si dessus, ils sont systématiquement reconnues comme différents .. Alors qu'ils ne le sont pas bien sur.
    J'ai résolu le problème en concaténant un bout de chaine vide comme ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($chaine."" == $chaine2.""){}
    Simple et efficace, mais pourquoi???

  2. #2
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut
    Pourquoi as-tu fais une concaténation, ça ne s'invente pas ce type de solution...

    Un problème d'encodage ? de fin de ligne ?
    -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_SIGNATURE -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
    Dans la mesure du possible, essayez de montrer votre problème en situation réelle en nous donnant une url, que l'on puisse tester.
    Pensez également à cocher

    Aucun problème ne doit être résolu en MP (Message Privé) le forum est là pour ça.

    Dimension Internet

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Points : 218
    Points
    218
    Par défaut
    Avant de concaténé, j'ai fait certain test ...
    Au fait merci de ton éclaircissement, je travail depuis peut en UTF-8 et je suis maintenant persuadé que sa vien de sa.
    Donc j'en suis venu à concaténé car j'ai fait ces test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if($chaine == "laValeurIdentique"){}
    if($chaine2 == "laValeurIdentique"){}
    Et le test était vrai à chaque foie

    salut

  4. #4
    Membre averti
    Homme Profil pro
    Lead Dev Web
    Inscrit en
    Avril 2005
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Lead Dev Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2005
    Messages : 282
    Points : 390
    Points
    390
    Par défaut
    Tu as donc résolu ton problème sans concaténer ?

    Et si tu fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if((string)$chaine == (string)$chaine2){}
    Ca donne quoi ?

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 240
    Points : 104
    Points
    104
    Par défaut
    Citation Envoyé par yannux Voir le message
    Tu as donc résolu ton problème sans concaténer ?

    Et si tu fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if((string)$chaine == (string)$chaine2){}
    Ca donne quoi ?
    Ou alors ceci, car il existe des espaces invisibles en fin de chaines. Et pour comparer des string "trois égal" sont parfois nécessaires.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(trim($chaine) === trim($chaine2)){
     
     
    }

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Points : 218
    Points
    218
    Par défaut
    Il n'y à pas d'espace, c'est certain, mais c'est bon à connaitre une tel fonction.
    En fait, je tire les 2 chaines du document xml avec simpleXML qui utilise utf-8 uniquement. Ensuite une des 2 entre dans un tableau et est sans doute converti au format de php qui n'est pas utf-8 (ISO-8859-1). Je vais faire un test sur la valeur direct de l'xml avec la fonction utf8_decode() et je serai fixé...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if( $valeurDuTableauPhp == utf8_decode($valeurDirectXml) ) {}
    Bien, sa marche. I faut ce méfier de l'encodage.
    A ce qu'il parait, un jour php sera totalement utf-8.

  7. #7
    Membre averti
    Homme Profil pro
    Lead Dev Web
    Inscrit en
    Avril 2005
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Lead Dev Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2005
    Messages : 282
    Points : 390
    Points
    390
    Par défaut
    c'est pas simplement les 2 fichiers xml qui ont un encodage différent ?

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Points : 218
    Points
    218
    Par défaut
    Non, les 2 fichiers xml sont en utf-8 et de toute manière, pour les parser avec simlpeXML il faut les encoder en utf-8 s'ils ne le sont pas car simpleXML ne supporte que cet encodage.

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

Discussions similaires

  1. [VBA]excel comparaison de chaine de caractere
    Par ogenki dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/01/2006, 15h32
  2. [langage] Comparaison de chaîne
    Par Fastshadow dans le forum Langage
    Réponses: 7
    Dernier message: 05/09/2004, 18h58
  3. comparaison de chaines de caracteres en PLSQL
    Par biozaxx dans le forum PL/SQL
    Réponses: 3
    Dernier message: 19/08/2004, 09h41
  4. Comparaison de chaines
    Par Marc_P dans le forum Linux
    Réponses: 6
    Dernier message: 17/02/2004, 17h04
  5. [LG]comparaison de chaines de caracteres
    Par thesam dans le forum Langage
    Réponses: 6
    Dernier message: 20/05/2003, 22h41

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