完全重新编辑的问题
<?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
问题:
为什么s1
和s2
不起作用,以及如何解决此问题?
答案 0 :(得分:1)
我猜测你在这里测试的东西,因此有:
$test_json = '{"req":"auth","token":"1234567\/\\"}';
虽然单引号会忽略\n
之类的内容,但\\
仍被视为单个反斜杠。这意味着您生成的JSON是:
{"red":"auth","token":"1234567\/\"}
不用说,这是一个语法错误。
如果您从外部来源获取JSON,则无需担心此问题,但如果您使用硬编码的JSON字符串进行测试,则需要:
$test_json = '{"req":"auth","token":"1234567\/\\\\"}';
答案 1 :(得分:0)
您必须在json_decode之前调用stripslashes函数,即在第一个print_r之前添加2行以下,以便它解码并打印正确的数组。
$s1 = stripslashes($s1);
$s2 = stripslashes($s2);