Neden kaçış karakterleri gizli girişinin değerine ilave ediliyor

4 Cevap php
<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>

Form yayınlanmıştır olduğunda, aşağıdaki dize div etiketleri arasında gösterilir.

{\"field0\": \"Im a string\", \"field1\": 84, \"field3\": \"so am I\"}

Why are the escape characters being added? Are they being added by the PHP server or the web client? Can I do anything to prevent this?

Birisi zaten PHP fonksiyon stripslashes bahsetti. Ben şimdi onu kullanıyorum ama hep birlikte bölü kurtulmak istiyorum.

4 Cevap

Ben sorunun sadece tek bir çıkış dize kullandığınız araçları tarafından yapılan önceleme olduğuna inanıyorum. Örneğin:

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

çıkmamış gibi çift tırnak gösterecektir. Benzer şekilde, tarayıcı Charles gibi bir vekil bağladım ise ilk örneğini çalışan çıkmamış gibi çift qoutes gösterir.

Yani bu dizelerini gösteren zaman Kundakçı / PHP yok sadece bir oto-kaçış olduğuna inanıyorum.

sihirli tırnak ev sahibi etkin olup olmadığını kontrol edin

Çoğu muhtemelen magic_quotes_gpc sizin sunucu üzerinde etkin hav. Bu yapılandırma seçeneği ve özelliği PHP5.3 önerilmiyor. Eğer yükseltme kadar:

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);
}

Yukarıdaki çözüm Ben birkaç yıl önce bir yerde buldum birinin koduna dayanmaktadır.