php中文乱码需统一编码:一、php文件保存为utf-8无bom;二、php顶部用header()声明content-type: text/html; charset=utf-8;三、html中添加;四、mysql连接与表字段均设为utf8mb4;五、web服务器配置默认字符集为utf-8。

如果PHP代码在浏览器中运行时出现中文乱码,通常是由于文件编码、HTTP响应头、数据库连接或HTML页面声明之间存在编码不一致。以下是解决此问题的步骤:
一、确认PHP源文件保存编码为UTF-8无BOM
PHP脚本本身若以非UTF-8(如GBK、ANSI)编码保存,会导致输出中文时字节序列错误,进而产生乱码。必须确保编辑器将PHP文件保存为UTF-8无BOM格式。
1、使用VS Code打开PHP文件,点击右下角编码显示区域(如“UTF-8”或“GBK”)。
2、在弹出菜单中选择“通过编码重新打开” → “UTF-8”。
立即学习“PHP免费学习笔记(深入)”;
3、再次点击编码区域,选择“另存为编码” → “UTF-8”,并确认勾选“无BOM”选项。
4、保存文件后刷新浏览器查看效果。
二、设置PHP输出的HTTP响应头为UTF-8
即使文件是UTF-8编码,若PHP未明确告知浏览器使用UTF-8解析响应体,浏览器可能按默认编码(如ISO-8859-1)解码,导致乱码。需在输出任何内容前调用header()函数声明字符集。
1、在PHP文件最顶部(必须在任何echo、print或空白输出之前)添加以下语句:
2、header('Content-Type: text/html; charset=utf-8');
3、若使用PHP 7.4+且启用了output buffering,可配合ob_start()确保头部可安全发送。
三、在HTML meta标签中声明charset
当PHP输出HTML内容时,浏览器会优先依据HTML中的声明确定编码。若缺失或声明错误,仍将导致乱码,尤其在未发送HTTP头或头被覆盖时。
1、在HTML的
部分插入标准meta声明。2、
3、确保该标签位于所有其他依赖字符集的标签(如
四、统一MySQL数据库连接与查询编码
若PHP从MySQL读取中文数据后显示乱码,说明客户端(PHP)、连接层、表字段三者编码不一致。仅修改PHP文件编码无法解决此场景下的乱码。
1、在mysqli连接建立后立即执行:mysqli_set_charset($connection, 'utf8mb4');
2、或在PDO连接DSN中加入;charset=utf8mb4,例如:mysql:host=localhost;dbname=test;charset=utf8mb4。
3、确认数据库、表、字段的字符集均为utf8mb4(而非旧版utf8),可通过SQL命令SHOW CREATE TABLE table_name验证。
五、检查Web服务器默认字符集配置
Apache或Nginx可能在全局或虚拟主机层面设置了默认字符集,覆盖PHP或HTML的声明,从而引发乱码。
1、对于Apache,在httpd.conf或.htaccess中查找AddDefaultCharset指令。
2、若存在AddDefaultCharset ISO-8859-1等非UTF-8设置,将其改为:AddDefaultCharset UTF-8。
3、对于Nginx,在server块中确认是否设置了charset指令,应设为:charset utf-8;。











