我正在try 使用以下行从post请求中获取数据:

$data = file_get_contents('php://input');

JSON字符串可能类似于:{"test" : "test one \xe0 "}

问题是,当我试着做json_decode($data)分时,我得到了null分.到var_dump()年到$data年,我看到一些像\xe0 \xe7a这样的字符.

发送的数据是utf-8格式.我也用了utf8_decode($data)个,但运气不好.有人能解释一下我错过了什么,或者如何解决这个问题吗?

我需要将无效的json转换为:

$data = '{"test" : "test one \xe0 "}';

致:

$data = '{"test" : "test one à "}';

推荐答案

使用字符串函数Mutations json字符串总是需要引起担忧,因为误报替换通常很容易损坏有效负载.也就是说,这里有一个脚本可以try 纠正无效的json字符串.

代码:(Demo)

$json = '{"test" : "test one \xe0, \x270B"}';
    
$json = preg_replace_callback(
           '/\\\\x([[:xdigit:]]+)/',
           fn($m) => sprintf('\u%04s', $m[1]),
           $json
     );
     
echo "\n" . var_export(json_validate($json), true);
echo "\n$json\n";
var_export(json_decode($json));

输出:

true
{"test" : "test one \u00e0, \u270B"}
(object) array(
   'test' => 'test one à, ✋',
)

如果这有已知的缺陷,请在下面留下 comments ,我会努力克服这个问题,当我有时间.

我的一个相关答案是:Replace all hex sequences with ascii characters

Php相关问答推荐

如何使用PHP停止foreach循环中的重复项?

根据特定运输类别增加WooCommerce购物车总重量

编写WooCommerce多步骤签出

msgraph-sdk-php v2如何传递skiptoken到request?

如何在php中生成包含第100秒的时间序列?

我必须对所有的SQL查询使用预准备语句吗?

对产品/库存结果集进行分组和计数,形成多维分层数组

如何在 PHP 中以 hh:mm:ss 格式获取两个 strtotime datetime/s 之间的时间差

如何在 Woocommerce 中自动删除旧的已完成订单

在 Heroku 上部署 Sylius - 路由不正确

htaccess 重定向子域错误的 url

获取 Shopware 6 集合元素的值,PHP

使用 PHP 的 OAuth 2.0 MAC

根据WooCommerce中的产品重量更改简单产品的输入数量步值

使用现有的htaccess的PHP路由脚本

Laravel路由中的符号在slug中会创建额外的斜杠

为什么foreach循环会输出每个结果?

PHP preg_replace括号和方括号内的所有逗号

使用 Process facade 在外部 Laravel 项目上运行 Artisan 命令会返回主项目的数据库错误

如何在 Laravel 9 中判断异常是否可报告?