【问题标题】:php://input retrieve JSON with hebrew via POST, returns question marksphp://input 通过 POST 用希伯来语检索 JSON,返回问号
【发布时间】:2025-12-21 14:40:15
【问题描述】:

我正在使用 PHP 脚本来检索通过 POST 发送的 JSON 对象。

JSON POST 请求基本上是这样的:

POST /script.php HTTP/1.1
Host: xx.xx.xx.xx
Content-Type: application/json
Content-Length: xx
Connection: keep-alive

{var:"value", var2:"value2", etc..}

PHP 服务器端代码如下:

$content = file_get_contents('php://input');
file_put_contents("check.log", $content);
$data = json_decode($content, true);

我有意将接收到的内容保存到文件 (check.log) 中,以便我可以按原样检查接收到的原始输入。

我的问题是,当 JSON 在“value”、“value2”等位置包含希伯来语字符时,它们会在保存的文件 check.log 中作为问号 (?????) 接收(我已通过十六进制编辑器检查了 check.log。它们是问号。0x3F),因此收到的“check.log”文件如下所示:

{var:"?????",var2:"??????",..}

如果对任何人有帮助,我将使用 Apache 2.2.3 服务器和 PHP 5。

这是为 php://input 包装器设置 PHP 的内部编码的问题吗?

有没有办法解决这个问题?

【问题讨论】:

标签: php json post php-stream-wrappers


【解决方案1】:

您的标题包含集合

header('Content-Type: application/json; Charset=UTF-8');

//编码你从服务器收到的数据

$json = utf8_encode($content);
$data = json_decode($content, true);

【讨论】: