考虑 j.json其内容遵循有效json的文件:
{
"t": "\\"
}
Run Code Online (Sandbox Code Playgroud)
PHP json_encode无法解析它:
$r=json_decode(file_get_contents('j.json'));
var_dump($r); //returns null
Run Code Online (Sandbox Code Playgroud)
注意:问题是清理,问题是一样的.
你需要这个:
<?php
json_decode('{
"target": "^http://(www|corail)\\\\.sudoc\\\\.abes\\\\.fr"
}')
Run Code Online (Sandbox Code Playgroud)
你\\只逃脱了一次.你需要两次,第一次是PHP,第二次是JSON.
PS因为你在JSON中的字符串看起来像一个RegExp,你可能需要再做一次转义,即再次反转双倍的数量
让我试着想象一下发生了什么.首先在PHP中,您以这种方式编写字符串:
$s='{"a":"^http://(www|corail)\\\\\\\\.sudoc\\\\\\\\.abes\\\\\\\\.fr"}'
Run Code Online (Sandbox Code Playgroud)
在此之后,如果echo $s你能找到这个:
{"a":"^http://(www|corail)\\\\.sudoc\\\\.abes\\\\.fr"}
Run Code Online (Sandbox Code Playgroud)
然后,如果您json_decode($s),该成员a将拥有以下内容:
^http://(www|corail)\\.sudoc\\.abes\\.fr
Run Code Online (Sandbox Code Playgroud)
最后,当您执行RegExp时,\\会进一步转义\.
如果你试试:
<?php
echo '{
"target": "^http://(www|corail)\\.sudoc\\.abes\\.fr"
}';
Run Code Online (Sandbox Code Playgroud)
输出是:
{
"target": "^http://(www|corail)\.sudoc\.abes\.fr"
}
Run Code Online (Sandbox Code Playgroud)
看错了什么?在JSON(JavaScript)中,\.它不是有效的转义序列,因此它不是有效的JSON,因此json_decode将失败,返回NULL.
如果你试试:
<?php
echo '{
"target": "^http://(www|corail)\\\\.sudoc\\\\.abes\\\\.fr"
}';
Run Code Online (Sandbox Code Playgroud)
输出是:
{
"target": "^http://(www|corail)\\.sudoc\\.abes\\.fr"
}
Run Code Online (Sandbox Code Playgroud)
转义序列\\对JSON有效.
| 归档时间: |
|
| 查看次数: |
685 次 |
| 最近记录: |