必须在PHP脚本最开头(

直接在 PHP 脚本最开头(<?php 之后、任何输出之前)写:
mb_internal_encoding('UTF-8');这个调用必须早于所有字符串操作,比如 mb_strlen()、mb_substr()、mb_convert_encoding() 等,否则这些函数可能按系统默认编码(如 ISO-8859-1)处理中文,导致长度算错、截断乱码。
为什么是 'UTF-8' 而不是 'utf8'?
PHP 对编码名大小写不敏感,但官方文档和 mbstring 扩展内部约定使用带连字符的标准写法 `'UTF-8'`。用 `'utf8'` 通常也能工作,但 `'UTF-8'` 更稳妥,尤其在较新版本或严格模式下。仅设这行还不够?要检查三件事
- mbstring 扩展已启用:运行 `var_dump(extension_loaded('mbstring'));`,返回 `bool(true)` 才有效;否则 `mb_internal_encoding()` 不起作用。 - PHP 文件本身保存为 UTF-8 无 BOM:BOM 会提前触发输出,导致 header 报错,也干扰 `mb_internal_encoding()` 的执行时机。 - 别和 default_charset 混淆:`mb_internal_encoding()` 只影响 mb_ 系列函数的内部字符处理逻辑;它不控制 HTTP 响应头,也不改变 `echo` 输出的编码——那需要 `header('Content-Type: text/html; charset=UTF-8')` 或 `default_charset = "UTF-8"` 配合。推荐搭配设置(防漏)
```php 如果项目中大量使用mb_* 函数,建议在框架入口文件(如 public/index.php)顶部统一加这两行,一劳永逸。



















