本地正常服务器打开网站乱码是怎么回事
服务器网站打开乱码、本地正常完整排查方案
本地开发正常、线上服务器乱码 = 编码不统一(页面 / 数据库 / 服务器 / 文件保存编码四项某处不一致),绝大多数是 GBK ↔ UTF-8 混用。
一、先快速判断乱码类型
问号????:页面编码和数据库编码不一致
å½½åÂÂ:页面 HTML 头没指定编码,浏览器自动解码错误
� ��:文件本身保存编码错误 / 数据库字段编码异常
二、分步排查(按优先级)
1. HTML 页面头部编码(最常见)
打开源码看<head>:
<!-- UTF-8标准写法 --> <meta charset="utf-8"> <!-- 老写法 --> <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
本地编辑器默认 UTF8,服务器没加 meta 标签,浏览器用 GBK 解析直接乱码。统一:全站全部设置
charset=utf-8
2. PHP/Asp/Java 代码头部编码
PHP
// 页面最顶部 header('Content-type:text/html;charset=utf-8');
3. 服务器 Web 容器编码(Nginx/Apache/Tomcat)
Nginx(站点配置)
add_header Content-Type 'text/html;charset=utf-8'; # 或在http/server块添加 charset utf-8;
修改后重载 nginx:nginx -s reload
Apache httpd.conf
AddDefaultCharset UTF-8
Tomcat server.xml(Connector 节点)
URIEncoding="UTF-8" useBodyEncodingForURI="true"
4. 数据库编码(mysql 最多)
本地库是 utf8,服务器库是 gbk,查出来的数据乱码
连接数据库时指定编码(PHP 示例)
// mysql_connect后执行 mysql_query("SET NAMES utf8"); // PDO $dbh = new PDO($dsn,$user,$pass,[PDO::MYSQL_ATTR_INIT_COMMAND=>'SET NAMES utf8']);
查看库编码
show create database 库名; show full columns from 表名;
库 / 表 / 字段统一改成
utf8mb4(推荐,兼容 emoji)ALTER DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
5. 源码文件本身保存编码
本地编辑器:UTF-8 无 BOM 保存
Windows 记事本保存会默认 GBK,上传服务器直接乱码
批量转码工具:Notepad++ 批量转为
UTF-8(无BOM)重新上传三、特殊场景
静态 html/css/js 乱码:Nginx/Apache 没配置默认编码 + 文件编码不一致
只有数据库内容乱码,固定文字不乱:只需要修正数据库连接 SET NAMES 和表编码
Linux 服务器系统编码问题
# 查看系统编码 locale # 临时改 export.UTF-8
页面 meta + 程序 header + web 服务 charset + 数据库 set names + 文件保存编码,五项全统一 UTF8 即可
文章由否玩代码编辑 https://www.fouwan.com


