trim() 只清除字符串首尾 ASCII 空白,无法处理中间的 Unicode 控制字符(如u200b、u2028),需用 preg_replace() 匹配 Unicode 码点范围清洗,或在数据库层预过滤。

PHP7.4 中用 trim() 清不了中间的不可见字符
trim() 只作用于字符串首尾,且默认只处理 ASCII 空白("
"),对中间的 u200b、u2028、u2029、u007f 等完全无效。数据库字段里混入的记录分隔符 或零宽空格 会原样透出,导致前端渲染异常或 JSON 解析失败。
常见错误现象:
- JSON 编码后返回
NULL或截断(因u2028/u2029在 JSON 中非法) - MySQL
TEXT字段导出 CSV 时被意外拆行 - Vue/React 渲染后文字“粘连”,检查 DOM 发现中间有
用 preg_replace() 匹配 Unicode 控制字符范围最稳妥
PHP7.4 的 preg_replace() 支持 UTF-8 模式,直接匹配 Unicode 码点范围比逐字节判断更可靠。推荐正则模式:
preg_replace('/[ --€-Ÿu200b-u200fu2028-u202eu2060-u2064u2066-u2069ufeffufdd0-ufdefufeffufff9-ufffc]/u', '', $str)
说明:
立即学习“PHP免费学习笔记(深入)”;
