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

PHP截断含特殊字符字符串后输出异常的原因解析

根本原因分析

你的代码触发警告的核心原因有两点:

1. 字节级截断破坏多字节字符完整性

原字符串包含UTF-8编码的特殊字符(比如é,在UTF-8编码中占2个字节),但你使用的strlen()和substr()是基于字节计数的函数,而非按实际字符数处理。当执行substr(trim($news), 0, 80)时,很可能正好将某个多字节字符的字节序列从中间切断,生成了不符合UTF-8编码规则的无效字节片段——这些无效字节就是系统提示的“无法显示的字符”。

2. 输出编码不符合环境要求

onlinephp.io的运行环境默认要求输出为标准UTF-8编码,而被截断后的字符串因包含无效字节,破坏了编码的规范性,导致环境无法正确解析和显示内容,最终抛出警告。

关于修复方法的说明

你使用mb_convert_encoding($news, 'UTF-8', mb_list_encodings())解决问题的原理是:该函数会遍历所有PHP支持的编码格式,尝试识别原字符串的编码,再将其转换为标准UTF-8,同时自动处理无效字节序列(替换或清理),让输出符合环境的编码要求。

更优的预防方案

如果要从根源避免这类问题,应该使用多字节字符串处理函数来截断内容,确保按字符数而非字节数操作:

$trimmedNews = trim($news);
if (mb_strlen($trimmedNews, 'UTF-8') > 80) {
    $news = mb_substr($trimmedNews, 0, 80, 'UTF-8') . "...";
}
echo "New string: " . $news;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 06:42:34