2009-06-24 5 views
3
<body> 
    <div> <?= $_POST['msg'] ?> </div> 
    <form id="frm" method="post"> 
    <input type="hidden" name='msg' value='{"field0": "Im a string", "field1": 84, "field3": "so am I"}' /> 
    <input type="submit" value="test" /> 
    </form> 
</body> 

Lorsque le formulaire est affiché, la chaîne suivante est affichée entre les balises div.Pourquoi les caractères d'échappement sont-ils ajoutés à la valeur de l'entrée masquée

{\ "Field0 \": \ "Im une chaîne \", \ "field1 \": 84, \ "field3 \": \ "si je suis I \"}

Pourquoi les caractères d'échappement sont-ils ajoutés? Sont-ils ajoutés par le serveur PHP ou le client Web? Puis-je faire quelque chose pour empêcher cela?

Quelqu'un a déjà mentionné la fonction PHP stripslashes. Je l'utilise pour l'instant mais je veux me débarrasser des barres obliques.

Répondre

4

Vérifiez si votre configuration PHP a magic_quotes_gpc activé, dans ce cas, le serveur PHP ajoute automatiquement des barres obliques pour GET/POST/valeurs cookie ...

1

Si l'information est correcte quand elle quitte le client, dojo doit faire un peu de magie avant d'envoyer l'info à $ _POST, non? Existe-t-il des indicateurs que vous pouvez définir pour la méthode dojo.toJson() qui vous permettra de contrôler le niveau de manipulation/d'échappement de la chaîne d'entrée? Sinon, je pense que l'utilisation de stripslashes() (ou autre, selon l'endroit où cette information est dirigée) est la seule réponse.

+0

Je ne pense pas que dojo fasse quelque chose de funky parce que frm.submit() est plain ole javascript et request.value == msg avant de soumettre le formulaire. Cependant, +1 pour les stripslashes(). Je vais l'utiliser jusqu'à ce que je devine ce qui se passe. –

2

Je crois que le problème est juste un d'échapper fait par les outils que vous utilisez pour sortir la chaîne. Par exemple:

var msg = dojo.toJson({field1: 'string', field2: 84, field3: 'another string'}); 
alert(msg); 

affichera les guillemets doubles comme non obsolètes. De même, en exécutant votre premier exemple pendant que le navigateur est connecté à un proxy comme Charles, montre les doubles qoutes comme non échappé. Donc je crois que c'est juste une auto-échappée que Firebug/PHP fait en vous montrant des chaînes.

1

vérifier si les guillemets magiques est activé sur votre hôte

1

La plupart vous avez probablement activé magic_quotes_gpc sur votre serveur. Cette option de configuration et cette fonctionnalité sont obsolètes dans php5.3. Jusqu'à ce que vous mettez à niveau:

if (get_magic_quotes_gpc()) { 
    set_magic_quotes_runtime(0); 
    foreach (array('POST', 'GET', 'REQUEST', 'COOKIE') as $gpc) 
     $GLOBALS["_$gpc"] = array_map('dequote', $GLOBALS["_$gpc"]); 
} 

function dequote($v) { 
     return is_array($v) ? array_map('dequote', $v) : stripslashes($v); 
} 

La solution ci-dessus est basée sur le code de quelqu'un que j'ai trouvé quelque part il y a quelques années.

Questions connexes