You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中JSON_INVALID_UTF8_IGNORE/SUBSTITUTE作用、默认行为及差异示例咨询

PHP中JSON_INVALID_UTF8_IGNORE与JSON_INVALID_UTF8_SUBSTITUTE的作用及测试疑问

请问JSON_INVALID_UTF8_IGNORE和JSON_INVALID_UTF8_SUBSTITUTE这两个PHP JSON标志的作用是什么?

根据官方文档:

JSON_INVALID_UTF8_IGNORE (int)
忽略无效UTF-8字符,自PHP 7.2.0起可用。
JSON_INVALID_UTF8_SUBSTITUTE (int)
将无效UTF-8字符转换为\0xfffd(Unicode替换字符)

关于默认行为的疑问

文档似乎暗示存在第三种默认行为:既不忽略也不转换,但具体表现不明确。原本以为默认情况下会抛出错误,但实际测试并未出现这种情况。

自行测试的代码及问题

我编写了如下测试代码:

<?php

$cases = [
    "\xc3\xb1, \xc3\x28",
    '["abcorem", "\xc3\xb1", "\xc3\x28"]',
    '["\xf8\xa1\xa1\xa1\xa1"]',
    '["\xf0\x28\x8c\xbc"]',
    mb_convert_encoding('["♠♣♥♦"]', 'ASCII'),
];

foreach ($cases as $case) {
    print_r(json_decode($case, TRUE, 8) ?? 'null'); echo "\n";
    print_r(json_decode($case, TRUE, 8, JSON_INVALID_UTF8_SUBSTITUTE) ?? 'null'); echo "\n";
    print_r(json_decode($case, TRUE, 8, JSON_INVALID_UTF8_IGNORE) ?? 'null'); echo "\n";
    echo "---\n";
}

但测试后发现三种标志场景下的返回结果并无差异,现有测试示例无法体现二者的区别。请提供或指引能体现其作用差异的测试字符串。

内容的提问来源于stack exchange,提问作者WoodrowShigeru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 04:44:54