2010-11-12 126 views
0

當我發佈與阿賈克斯一文中,像這樣:JSON解碼問題

,並用PHP接受它:

$text=$_POST['text'] 

似乎PHP編碼字符串自動解碼。有什麼辦法可以避免這種情況?

確定這裏是我想張貼與AJAX我原來的JSON字符串:

{"1":"\\"sdfsdfsdf" as&das&d ","2":"asdasd"} 

我不得不encodeURIComponent方法裏面的字符串,所以我可以將它張貼json.strigify是不編碼&:

{"1":"%22asdasd%5C%22asdasd%22asdasd%26asdasd","2":"asdasd"} 

但是當我收到PHP中的字符串「讓失敗的jsondecode因爲我得到

POST={"1":""sdfsdfsdf" as&das&d ","2":"asdasd"} 

任何想法?

+0

*「我必須encodeURIComponent字符串裏面」* - 當然不是。什麼讓你相信這個?另外,你的「原始JSON字符串」甚至不是一個有效的JS字符串,也不是有效的JS對象字面量。正如我所說,*請發佈您的代碼*。 – Tomalak 2010-11-12 14:58:11

回答

1

此功能(encodeURIComponent())確實不是產生JSON。

它產生一個URL編碼的字符串,並由服務器自動解碼。我不明白你爲什麼不想要那樣。

URL編碼是一種純粹的傳輸編碼,其目的是確保您發送到服務器的數據適合通過HTTP GET或POST傳輸,並且它不會出現亂碼。在填寫$_GET,$_POST$_REQUEST陣列之前,服務器爲您解碼它是正確的。它確保數據與從客戶端發送之前的數據形狀相同。

+0

因爲我真的發佈的是這樣的JSON:\t \t textnum_value [text_num] = encodeURIComponent(transtext); \t}); \t var textnum_value = JSON.stringify(textnum_value); – albanx 2010-11-12 13:04:51

+0

和jsondecode可以解決這個問題,如果它的字符類似於「 – albanx 2010-11-12 13:06:19

+0

@albanx:這是因爲你做錯了,你很可能會對你的數據進行雙重編碼,請在上面發佈你的JS代碼(整個'post()函數調用),我可以幫助你 – Tomalak 2010-11-12 13:11:04