2009-06-24 45 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> 

當表單發佈時,在div標記之間會顯示以下字符串。爲什麼將轉義字符添加到隱藏輸入的值

{\ 「field0 \」:\ 「我是個字符串\」, \ 「字段1 \」:84 \ 「字段3 \」:\ 「所以我 I \」}

爲什麼要添加轉義字符? 它們是由PHP服務器還是Web客戶端添加的? 我可以做任何事情來防止這種情況發生嗎?

有人已經提到了PHP函數stripslashes。我現在使用它,但我想擺脫所有的斜線。

回答

4

PHP配置檢查是否已激活magic_quotes_gpc,在這種情況下,PHP服務器自動添加斜線GET/POST/Cookie值...

1

如果信息是正確的,當它離開客戶端,然後道場必須做一些巫術在發送信息到$ _ POST之前,不是嗎?是否有任何可以爲dojo.toJson()方法設置的標誌,這些標誌將允許您控制輸入字符串操作/轉義的級別? 如果沒有,我認爲使用stripslashes()(或其他什麼,取決於這些信息的前往位置)是唯一的答案。

+0

我不認爲Dojo是做什麼時髦,因爲frm.submit()是JavaScript request.value ==味精之前提交表單,以純OLE。但是,爲stripslashes()+1。我會使用它,直到我弄清楚發生了什麼。 – 2009-06-24 17:28:56

2

我相信問題只是通過您使用輸出字符串的工具進行轉義一個。例如:

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

將顯示未引號的雙引號。同樣,在瀏覽器連接到像Charles這樣的代理服務器時運行第一個示例,會顯示雙重qoutes爲未轉義。

所以我相信這僅僅是一個自動逃脫螢火/ PHP確實顯示您的字符串時。

1

檢查,如果魔術引號是你的主機上啓用

1

最可能你的服務器上啓用了magic_quotes_gpc。此配置選項和功能在php5.3中已棄用。直到你升級:

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

上述解決方案基於我在幾年前某處找到的某人的代碼。

相關問題