【问题标题】:PHP json_decode backslashPHP json_decode 反斜杠
【发布时间】:2016-09-20 19:36:15
【问题描述】:

我在服务器上接收到一个 JSON 字符串,它必须通过 json_decode 进行转换。该字符串可能包含任何内容。在遇到一些难以重现的问题后,我尝试了以下测试:

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

这将返回 NULL。如果我删除 \\,则代码有效。我在谷歌开发工具中试过这个,它在 Javascript 中工作。如何让它在 json_decode 中工作?

谢谢!

【问题讨论】:

  • 这个字符串中的 \ 的作用是什么?逃避还是拥有文字 \ char?
  • 使用 \\\ 或 \\\\ 将成功解码包含文字反斜杠 (`\`) 字符的 JSON 字符串。
  • @lolbas,已经尝试过,也返回 null。事实上, str_replace("\\\\", ...) 实际上根本不起作用。抱歉,AbraCadaver 忘记提及该字符串已被发送者(在本例中为 Android 设备)转义。所以 \\ 是文字 \ 字符。
  • echo $data; 在解码之前检查它是否真的包含你想要的。
  • @MichałSznurawa 实际上我从这里发布的代码中删除了那部分。我经历了三个步骤,其中有几次尝试和 var_dump。数据和上面代码中json_decode之前的一样

标签: php json server


【解决方案1】:

您在此处遇到的 null 问题是由于双重转义引起的:一个用于 PHP 字符串,一个用于稍后解释的 json。所以例如添加几个\ 之后,它的行为是这样的:

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

您也可以将您的测试json放入文件并读取它,然后您不必担心将任何内容转义为PHP字符串。

【讨论】:

  • 感谢您的回复!不幸的是,这是由用户输入直接生成的。虽然这个案例是一个测试,但我们在 PHP 端接收数据时遇到了几个“特殊字符”问题。由于我无法控制输入,所以我必须找到一个服务器端的解决方案。
猜你喜欢
  • 2010-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多