JSON中的PHP Unicode

Ros*_*ane 5 php unicode json

我正在向我的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)

我的问题是:我怎样才能最好地从我的应用程序的一端到另一端获得这个笑脸?

我很感激您提供的任何帮助.

Mif*_*eet 2

我相信这是 json_encode 的正确行为。如果您使用以下内容:

\n
<script>\n    alert(\n     <?php\n       $a = "\xe2\x98\xba";\n       echo json_encode($a);\n     ?>\n    );\n</script>\n
Run Code Online (Sandbox Code Playgroud)\n

HTML 输出将是,alert("\\u263a");并且警报将显示,\xe2\x98\xba因为"\\u263a"它是 JavaScript 中字符串的正确表示形式。

\n

在 PHP 中使用JSON_UNESCAPED_UNICODE常量作为第二个参数json_encode也是一种选择,但仅适用于 PHP 5.4.0 或更高版本。

\n

您打算在什么场景下使用该值?

\n
\n

编辑:

\n
\n

php -r \'echo json_encode("\\x98\\xba\\xe2");\'

\n

PHP 警告:json_encode():第 1 行命令行代码中的参数中的 UTF-8 序列无效

\n
\n

问题是您使用了错误的字符序列。它应该是

\n
echo json_encode("\\xe2\\x98\\xba"); // this works for me\n
Run Code Online (Sandbox Code Playgroud)\n

代替

\n
echo json_encode("\\x98\\xba\\xe2"); \n
Run Code Online (Sandbox Code Playgroud)\n