繁体   English   中英

使用转义斜线时的JSON语法错误

[英]JSON Syntax Error when using escaped slashes

完全重新编辑的问题

<?php
   $s1 = '{"req":"auth","token":"1234567\/\\"}'; // this seems to be valid, isn't it?
   $s2 = '{"req":"auth","token":"123456\/\\7"}'; // this seems to be valid, isn't it?
   $s3 = '{"req":"auth","token":"123456789"}';

   print_r(json_decode($s1,true));
   echo " - ERRORCODE FOR CASE#1 IS:" . json_last_error() . '<br />';

   print_r(json_decode($s2,true));
   echo " - ERRORCODE FOR CASE#2 IS:" . json_last_error() . '<br />';

   print_r(json_decode($s3,true));
   echo " - ERRORCODE FOR CASE#3 IS:" . json_last_error() . '<br />';
?>

结果:

 - ERRORCODE FOR CASE#1 IS:4
 - ERRORCODE FOR CASE#2 IS:4
Array ( [req] => auth [token] => 123456789 ) - ERRORCODE FOR CASE#3 IS:0

题:

为什么s1s2无法正常工作,如何解决?

我猜你在这里测试东西,因此有:

$test_json = '{"req":"auth","token":"1234567\/\\"}';

尽管单引号确实会忽略\\n ,但\\\\仍被视为单反斜杠。 这意味着您得到的JSON是:

{"red":"auth","token":"1234567\/\"}

不用说,这是语法错误。

如果要从外部来源获取JSON,则无需担心,但是如果要使用硬编码JSON字符串进行测试,则需要:

$test_json = '{"req":"auth","token":"1234567\/\\\\"}';

您必须在json_decode之前调用stripslashes函数,即在您的第一个print_r之前添加以下两行,以便它解码并打印正确的数组。

$s1 = stripslashes($s1);
$s2 = stripslashes($s2);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM