Sta*_*bie 5 php regex json escaping
我的JSON中有一些正则表达式,当我在在线JSON验证器上测试我的JSON时,这似乎不是问题.但是,当我接受JSON字符串并尝试json_decode()在PHP中时,我得到一个JSON_ERROR_SYNTAX.
有什么想法吗?我该如何解决这个问题?
示例代码:
<?php
$json = <<<EOD
{
"regex": [
"Hello\s+World"
]
}
EOD;
json_decode($json);
switch (json_last_error()) {
case JSON_ERROR_NONE:
echo ' - No errors';
break;
case JSON_ERROR_DEPTH:
echo ' - Maximum stack depth exceeded';
break;
case JSON_ERROR_STATE_MISMATCH:
echo ' - Underflow or the modes mismatch';
break;
case JSON_ERROR_CTRL_CHAR:
echo ' - Unexpected control character found';
break;
case JSON_ERROR_SYNTAX:
echo ' - Syntax error, malformed JSON';
break;
case JSON_ERROR_UTF8:
echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
break;
default:
echo ' - Unknown error';
break;
}
Run Code Online (Sandbox Code Playgroud)
问题在于\s.改变它\\s没有帮助.
当您"\s"使用PHP 编写时,文字字符串是\s因为\s它不是有效的转义序列.
当你用"\\s"PHP 编写时,文字字符串是\s因为\\ 是一个有效的转义序列.
另一方面,JSON会为无效的转义序列抛出错误,这是你的问题.
解决方案: 不要手工编写JSON.
$json = json_encode(['regex'=> ['Hello\s+World']]);
Run Code Online (Sandbox Code Playgroud)
输出:{"regex":["Hello\\s+World"]}[注意:文字字符串,有效的JSON]
糟糕的解决方案比它的价值更麻烦,可能会导致问题: "Hello\\\s+World"欢迎逃离地狱.
| 归档时间: |
|
| 查看次数: |
299 次 |
| 最近记录: |