2016-05-23 241 views
1

我在服務器上收到一個JSON字符串,必須通過json_decode進行轉換。該字符串可能包含任何內容以下是一些難以重現的問題,我嘗試了以下測試:PHP json_decode反斜槓

$data = '{"client":"Test @#€%&-+()\/\\_*\""}'; 
$data = json_decode($data); 
var_dump($data); die; 

這將返回NULL。如果我刪除\\,則代碼有效。我在谷歌開發工具中嘗試了這一點,它在Javascript中工作。我如何使它在json_decode中工作?

謝謝!

+0

\在這個字符串中的目的是什麼?爲了逃避或擁有文字\字符? – AbraCadaver

+0

使用\\\或\\\\將會成功解碼其中包含文字反斜槓('\\')字符的JSON字符串。 – lolbas

+0

@lolbas,已經嘗試過,也返回null。事實上,str_replace(「\\\\」,...)實際上根本不起作用。 AbraCadaver,抱歉,忘記提及該字符串已被髮件人(在本例中爲Android設備)轉義。所以\\是一個文字\字符。 – Sagito

回答

0

您在這裏遇到的問題是由於雙重轉義引起的:一個用於PHP字符串,一個用於解釋後來的json。所以例如加入少量\後,它的行爲像:

php > $data = '{"client":"Test @#%&-+()\\/\\\\_*\""}'; 
var_dump(json_decode($data)); 
object(stdClass)#1 (1) { 
    ["client"]=> 
    string(18) "Test @#%&-+()/\_*"" 
} 

你可以把和測試JSON轉換成文件並讀取它,然後你將不必擔心任何逃跑的PHP字符串。

+0

感謝您的回覆!不幸的是,這是由用戶輸入直接生成的。儘管這是一個測試,但在接收PHP端的數據時,我們遇到了一些「特殊字符」的問題。由於我無法控制輸入,所以我必須找到一個服務器端解決方案。 – Sagito