PHP 中文乱码怎么解决
打开一个本地PHP项目,浏览商品列表页时突然发现,商品名称、简介这些中文全变成了乱码,像一堆看不懂的“小方块”,换浏览器也没用,这是很多新手做PHP开发时都会遇到的小麻烦。别慌,这不是什么大问题,只要从几个常见的“编码细节”入手调整,就能快速解决。
先查最基础的:PHP文件本身的编码设置
很多时候乱码的根源,居然是开发者存代码时的编码没选对。比如用记事本写PHP代码,默认编码可能是GBK,而服务器跑代码时用的是UTF-8,两边“语言”不对,中文自然就乱码了。

举个生活化的例子:你用中文写了一张便签(PHP代码),却用日文的信封(服务器编码)装着寄出去,对方拿到的便签文字肯定是乱的。解决方法也简单,只要把PHP文件的编码改成UTF-8无BOM格式就行,用VS Code、Sublime这些常用编辑器,在右下角就能直接切换编码,改完重新保存,基本能搞定一半的小乱码问题。
再看数据库:字符集不匹配是重灾区
如果是连接数据库后,页面显示的中文乱码,90%的概率是数据库编码和PHP用的编码对不上。比如你建数据库时选了GBK编码,PHP却用UTF-8去拿数据,就会出现乱码。
就像你把中文的书(UTF-8页面)塞进了英文的书架(GBK数据库),书里的文字和书架格格不入。解决步骤分三步:先把数据库、表的字符集都改成utf8mb4(这个编码比普通UTF-8多了对 emoji 的支持,现在更常用);然后在PHP连接数据库的代码里,加一句设置字符集的语句——比如用MySQLi的话,加$conn->set_charset("utf8mb4"),用PDO的话,在连接参数里加charset=utf8mb4,两边编码统一了,数据库里的中文就能正常显示。
页面输出:给浏览器“看”对的编码
有时候PHP和数据库编码都对了,页面还是乱码,可能是没告诉浏览器用什么编码来读页面。就像你没告诉别人用中文还是英文读你的信,对方只能瞎猜,猜不对就乱码。
解决方法是在PHP页面的<head>标签里,加一行<meta charset="utf-8">,或者更稳妥的,在PHP代码开头加header("Content-Type: text/html; charset=utf-8");,直接告诉浏览器页面用的是UTF-8编码,浏览器就能准确解析中文了。
特殊情况:接口或输出中文的场景
如果是做PHP接口返回中文,或者直接echo中文时乱码,还要注意:不要在输出内容前有多余的空格或BOM头,刚才说的UTF-8无BOM格式,就是避免这个问题——BOM头相当于文件开头的“小标记”,会干扰浏览器或接口的编码识别,保存时选无BOM格式就能避开。
总结一下,PHP中文乱码的解决逻辑很简单:先统一“语言”(编码),从PHP文件、数据库、页面输出三个环节对齐UTF-8(更推荐utf8mb4),基本就能搞定99%的乱码问题。遇到乱码时别慌,按这几个步骤一步步排查,很快就能恢复正常的中文显示。