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
相关产品推荐
相关产品推荐

