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

传入非ASCII字符时json_encode返回false的原因是什么?

问题根因

PHP 内置的 json_encode() 函数要求所有输入的字符串必须为 有效的UTF-8编码,不符合编码要求的输入会直接导致函数返回false。

你示例中调用chr(128)生成的是单字节高位扩展ASCII字符,不属于合法的UTF-8编码序列,因此触发编码校验失败,函数返回布尔值false。

错误验证

你可以调用json_last_error_msg()函数查看具体错误原因,测试代码如下:

$r = json_encode(chr(128));
var_dump($r);
echo json_last_error_msg();
// 输出内容为:Malformed UTF-8 characters, possibly incorrectly encoded
常见解决方案
  • 先做编码转换再序列化:如果你的业务数据使用GBK、ISO-8859-1等非UTF-8编码,先通过mb_convert_encoding()或iconv()函数将内容转换为UTF-8编码,再传入json_encode()处理。
  • 使用参数忽略编码错误:PHP 7.2及以上版本可以传入JSON_INVALID_UTF8_SUBSTITUTE参数,将无效UTF-8字符自动替换为�占位符,避免函数返回false,示例如下:
    $r = json_encode(chr(128), JSON_INVALID_UTF8_SUBSTITUTE);
    var_dump($r); // 输出结果为 string(6) ""\ufffd""
    
  • 如果接受部分内容丢失,也可以使用JSON_PARTIAL_OUTPUT_ON_ERROR参数,跳过编码错误的内容继续生成序列化结果,该参数兼容性更好(PHP 5.5+支持),但可能存在数据丢失风险,需谨慎使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:36:01