PHP没有ArrayList类型,实际使用的是array或ArrayObject;输出中文乱码需检查文件编码、HTTP头、HTML meta及json_encode是否加JSON_UNESCAPED_UNICODE标志。

PHP怎么输出ArrayList?根本不存在这个类型
PHP 没有 ArrayList 这个内置类型,这是 Java 或 C# 的概念。你在 PHP 里实际操作的只是普通数组(array)或对象(比如 ArrayObject)。如果你看到代码里写了 new ArrayList(),那要么是用了某个第三方库(极少见),要么是混淆了语言特性。
所以第一步要确认:你手里的变量到底是 array 还是某个自定义类实例?用 var_dump($var) 或 gettype($var) 看清真实类型,别被变量名误导。
print_r / var_dump 输出中文变成 \uXXXX 怎么办
这通常发生在你用了 json_encode() 之后再输出,或者 IDE/调试工具自动做了 JSON 格式化。原始 print_r() 和 var_dump() 默认不会转义中文——它们直接输出 UTF-8 字节流。
- 检查是否误写了
echo json_encode($arr, JSON_UNESCAPED_UNICODE);—— 少了JSON_UNESCAPED_UNICODE就会把中文转成\u6211这种形式 - 确认脚本文件本身是 UTF-8 编码(无 BOM),且 HTTP 响应头或 HTML meta 正确声明了
charset=utf-8 - 如果在浏览器中看
var_dump()输出乱码,大概率是页面没设 charset,不是 PHP 问题
想让数组“可读地”输出中文,推荐这几种方式
不要依赖 echo $arr(会报 Notice),也不要用裸 json_encode($arr)(默认转义中文)。根据场景选:
立即学习“PHP免费学习笔记(深入)”;
- 调试用:
echo "—— 最简单,中文原样显示,适合 CLI 或开发环境"; print_r($arr); echo "
"; - API 返回 JSON:
header('Content-Type: application/json; charset=utf-8'); echo json_encode($arr, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); - 嵌入 HTML 页面:
htmlspecialchars(json_encode($arr, JSON_UNESCAPED_UNICODE), ENT_QUOTES, 'UTF-8'),再交给前端JSON.parse()
mb_internal_encoding() 和 default_charset 不解决输出转义问题
很多人以为改 mb_internal_encoding('UTF-8') 或 php.ini 的 default_charset = "UTF-8" 就能“修复中文转义”,其实它们影响的是多字节字符串函数(如 mb_strlen)和 HTTP header 中的 charset 声明,跟 json_encode 是否转义中文无关。
真正起作用的只有 json_encode() 的标志位:JSON_UNESCAPED_UNICODE 是必须加的;如果还遇到斜杠被转义(\/),顺手加上 JSON_UNESCAPED_SLASHES。
最常被忽略的一点:即使加了这些 flag,如果源数组里字符串本身是 GBK 编码(比如从旧数据库读出来的),json_encode 仍会失败或输出空字符串——先用 mb_convert_encoding($str, 'UTF-8', 'GBK') 转码,再 encode。











