2010-08-05 98 views
3

我有一個問題傳遞一個JSON字符串回到一個PHP腳本來處理。用正斜槓轉義json字符串?

我有一個已經使用dojo.toJson()包含/,看起來像這樣創造了一個JSON字符串:

[{"id":"2","company":"My Company/Corporation","jobrole":"Consultant","jobtitle":"System Integration Engineer"}] 

當我將字符串傳遞迴PHP腳本得到它的切碎在/和創建一個格式不正確的JSON字符串,這意味着我不能將其轉換爲一個PHP數組。

轉義此字符串中/的最佳方法是什麼?我正在查看正則表達式並執行string.replace(),但是我的正則表達式並不那麼強大,而且我不確定是否有更好的方法來執行此操作?

非常感謝

回答

3

你不應該需要做什麼特別的JSON來表示/ - 一個字符串可以包含除外"或(不使用時啓動一個轉義序列)\任何字符。

的問題是有可能因此在:

  • 你解析JSON服務器端的方式
  • 方式的解析HTTP的數據,以獲得JSON字符串
  • 你編碼之前的字符串的方法使HTTP請求

(我敢打賭它是這些選項中的最後一個)。

我會首先使用LiveHttpHeaders或Charles Proxy等工具來查看發送到服務器的數據。

(我也會用你用來提出請求的代碼和你用來解析它的代碼來擴展問題)。

+0

HTTPFox比LiveHTTPHeaders更有用 - 它捕獲多個請求,並以良好的製表格式顯示組件,而不是LHH的文本轉儲。 – 2010-08-05 22:26:11

0

\/。看看here。該文檔非常易於閱讀,簡潔明瞭。但未轉義的/在JSON字符串中應該仍然有效,所以也許你的bug在別的地方?

+0

我現在所做的全部都是將字符串作爲GET請求傳遞給php腳本,當調試器通過時,傳回的字符串停在'My Comany'處,剩下的部分丟失。 – 2010-08-05 10:48:00

+0

好的。 Kow EXACTLY你把這個變量傳遞給PHP腳本(代碼)? 順便說一句 - 將JSON傳遞給PHP沒有任何意義。從PHP到JS - 沒問題,但否則它有點愚蠢。 JSON基本上是Javascript對象,所以在PHP中你必須將它編碼到PHP然後解析。更好地傳遞一系列GET變量 - PHP本身處理它們。 – 2010-08-05 11:00:58

+0

@Tomasz - PHP已經在本地處理了JSON一段時間(你只需要明確地調用解析函數) – Quentin 2010-08-05 11:35:30

0

好的。無論如何。

將變量傳遞給PHP時不使用JSON - 這對於以其他方式傳遞變量很有幫助。

相反,您最好使用http://api.dojotoolkit.org/jsdoc/1.3/dojo.objectToQuery方法並在PHP端解析標準PHP $_GET變量。

編輯:好的,我在這兒也是'迷失在樹林裏',但這裏有一個提示 - 檢查你是否在這裏有一些mod_rewrite規則。看起來像那樣。另外,如果你可以給我發送給你404的URL(你可以刪除域名部分,我對腳本文件名以及所有事後都感興趣),也許我可以給你更詳細的答案。

+0

我試過這個,但是當看着使用螢火蟲的PHP腳本的調用時,我得到了一個404錯誤,當我刪除/它通過罰款?必須有其他的東西影響這一點,我正在做我會繼續堵塞這一點。 – 2010-08-05 12:29:28

+0

此外,如果您可以向我發送給您404的URL(您可以刪除域名部分,我對腳本文件名以及所有事件都感興趣),也許我可以給您更詳細的答案。 – 2010-08-05 12:51:28

0

要清楚的是,您選擇將JSON發送到PHP還是使用常規表單值是一個優先選擇。它/應該/以任一方式工作。這聽起來像你沒有在客戶端編碼JSON,所以服務器端正在處理/作爲路徑分隔符。在這種情況下,它在json_decode之前得到它。

這樣,嘗試encodeURIComponent方法(dojo.toJson(東西))

用來逃跑斜線
0

json_encode()。像這樣:

prompt> json_encode(json_decode('"A/B"')); 
string(6) ""A\/B"" 

JSON_UNESCAPED_SLASHES在PHP5.4中添加以抑制此行爲。