2016-05-23 236 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