我正在向我的PHP Web服务发送一个JSON POST主体,如下所示:
{
"foo": "?"
}
Run Code Online (Sandbox Code Playgroud)
当我在PHP中回显身体时,我看到了:
{
"foo":"\xe2\x98\xba"
}
Run Code Online (Sandbox Code Playgroud)
我也试过发送\uXXXX相应的:
{
"foo": "\u263a"
}
Run Code Online (Sandbox Code Playgroud)
这进一步,因为收到的原始JSON字符串"foo":"\\u263a",但json_decode值转向后\xe2\x98\xba.
当我在JSON响应中使用该值时,这会导致问题.我明白了:
json_encode(): Invalid UTF-8 sequence in argument
Run Code Online (Sandbox Code Playgroud)
最简单的是,这就是我尝试对字符串进行JSON编码的原因:
> php -r 'echo json_encode("\x98\xba\xe2");'
PHP Warning: json_encode(): Invalid UTF-8 sequence in argument in Command line code on line 1
Run Code Online (Sandbox Code Playgroud)
我的问题是:我怎样才能最好地从我的应用程序的一端到另一端获得这个笑脸?
我很感激您提供的任何帮助.
我相信这是 json_encode 的正确行为。如果您使用以下内容:
\n<script>\n alert(\n <?php\n $a = "\xe2\x98\xba";\n echo json_encode($a);\n ?>\n );\n</script>\nRun Code Online (Sandbox Code Playgroud)\nHTML 输出将是,alert("\\u263a");并且警报将显示,\xe2\x98\xba因为"\\u263a"它是 JavaScript 中字符串的正确表示形式。
在 PHP 中使用JSON_UNESCAPED_UNICODE常量作为第二个参数json_encode也是一种选择,但仅适用于 PHP 5.4.0 或更高版本。
您打算在什么场景下使用该值?
\n编辑:
\n\n\nphp -r \'echo json_encode("\\x98\\xba\\xe2");\'
\nPHP 警告:json_encode():第 1 行命令行代码中的参数中的 UTF-8 序列无效
\n
问题是您使用了错误的字符序列。它应该是
\necho json_encode("\\xe2\\x98\\xba"); // this works for me\nRun Code Online (Sandbox Code Playgroud)\n代替
\necho json_encode("\\x98\\xba\\xe2"); \nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
4379 次 |
| 最近记录: |