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 :

json_decode() et guillemets [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2003
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 48
    Points : 30
    Points
    30
    Par défaut json_decode() et guillemets
    Bonjour,
    j'ai un problème avec la fonction json_decode()

    Un script JS envoie une String en post à un script PHP :

    Voici ce qu'envoie JavaScript lorsque je vais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sstitres = [{"id":"0","timeStart":"0:00:04:978","timeEnd":"0:00:08:121","text":"l'etre supreme"}]
    Voici ce que reçoit mon script lorsque je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo $_POST['sstitres'];
    //ce qui me donne
    //[{\"id\":\"0\",\"timeStart\":\"0:00:04:978\",\"timeEnd\":\"0:00:08:121\",\"text\":\"l\'etre supreme\"}]

    1 ) Première question : quand est ce que s'effectue l'échappement de toutes mes double quotes ??

    Je supprime donc tous les échappements avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $json = str_replace('\"', '"', $_POST['sstitres']);
    //ce qui me donne
    //[:{"id":"0","timeStart":"0:00:04:978","timeEnd":"0:00:08:121","text":"l\'etre supreme"}]
    Ensuite je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $output = json_decode($json, true);
    print_r($output);
    Et là la fonction plante. Alors pour tester, j'ai placer la chaîne de caractère en dure directement dans l'appel de la fonction. Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $output = json_decode('[{"id":"0","timeStart":"0:00:04:978","timeEnd":"0:00:08:121","text":"l\'etre supreme"}]', true);
    print_r($output);
    Et bizarrement cela donne le résultat escompté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array ( [0] => Array ( [id] => 0 [timeStart] => 0:00:04:978 [timeEnd] => 0:00:08:121 [text] => l'etre supreme ) )
    2) Pourquoi cette différence de comportement suivant ces deux cas ?

    Le phénomène arrive uniquement lorsque j'utilise un ' ou un " dans une de mes valeurs de mon objet JSON.

    Quelqu'un a une autre méthode, une astuce ?

    Merci

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 398
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 398
    Points : 15 760
    Points
    15 760
    Par défaut
    les guillemets viennent peut-être des "magic quotes" :
    http://php.net/info.configuration#ini.magic-quotes-gpc

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2003
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    Voici ma config pour les magic quotes :

    magic_quotes_gpc On On
    magic_quotes_runtime Off Off
    magic_quotes_sybase Off Off

    Il me faudrait quoi à la place ?

  4. #4
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par vikti Voir le message
    Voici ma config pour les magic quotes :

    magic_quotes_gpc On On
    magic_quotes_runtime Off Off
    magic_quotes_sybase Off Off

    Il me faudrait quoi à la place ?
    Surtout TOUT a OFF !

    de toute façon les derniéres versions ne laissent plus le choix !

    Cette fonctionnalité est OBSOLETE depuis PHP 5.3.0 et a été SUPPRIMEE depuis PHP 6.0.0. Nous vous encourageons vivement à ne plus l'utiliser

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2003
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    J'essai ça ce soir, je vous tiens au courant. Merci de votre aide.

  6. #6
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
        function array_clean(&$value)
        {
            assert(ini_get('magic_quotes_gpc')); // Juste pour dire que cette fonction ne doit être appelée QUE si les magic quotes sont activés
            $value = stripslashes($value);
        }
     
        if (ini_get('magic_quotes_gpc')) {
            array_walk_recursive($_GET, 'array_clean');
            array_walk_recursive($_POST, 'array_clean');
            array_walk_recursive($_COOKIE, 'array_clean');
        }
    ?>
    Si malheureusement tu ne peux pas désactiver les magic_quotes

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mars 2003
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 48
    Points : 30
    Points
    30
    Par défaut
    Ha je ne connaissais cette façon de faire. Je prend note. Mais je suis sur serveur local donc pas de soucis.

    Merci!

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mars 2003
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 48
    Points : 30
    Points
    30
    Par défaut Résolu !
    Merci beaucoup les gars ! Vous m'enlever un roncier du pied !
    C'était effectivement Magic_quote_gpc qui faisait tout foirer !
    Mon script marche à merveille maintenant !

    Encore merci !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/01/2004, 13h56
  2. PB guillemets
    Par LadyArwen dans le forum ASP
    Réponses: 2
    Dernier message: 17/09/2003, 09h56
  3. problème de guillemets dans une formule shell
    Par dim_italia dans le forum VBA Access
    Réponses: 7
    Dernier message: 18/08/2003, 12h46
  4. TAGS -> attributs sans guillemets
    Par Bastet79 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 14/08/2003, 13h01
  5. Comment coder guillemets et cotes ?
    Par Vow dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 14/05/2003, 12h11

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