您好!欢迎访问否玩代码!
广告位

本地正常服务器打开网站乱码是怎么回事

栏目: 日期: 浏览:16

服务器网站打开乱码、本地正常完整排查方案

本地开发正常、线上服务器乱码 = 编码不统一(页面 / 数据库 / 服务器 / 文件保存编码四项某处不一致),绝大多数是 GBK ↔ UTF-8 混用。

一、先快速判断乱码类型

  1. 问号????:页面编码和数据库编码不一致

  2. 彽字:页面 HTML 头没指定编码,浏览器自动解码错误

  3. � ��:文件本身保存编码错误 / 数据库字段编码异常

二、分步排查(按优先级)

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,查出来的数据乱码

  1. 连接数据库时指定编码(PHP 示例)

  2. // mysql_connect后执行 mysql_query("SET NAMES utf8"); // PDO $dbh = new PDO($dsn,$user,$pass,[PDO::MYSQL_ATTR_INIT_COMMAND=>'SET NAMES utf8']);

  3. 查看库编码

  4. show create database 库名; show full columns from 表名;

  5. 库 / 表 / 字段统一改成 utf8mb4(推荐,兼容 emoji)

  6. ALTER DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

  7. 5. 源码文件本身保存编码

  8. 本地编辑器:UTF-8 无 BOM 保存

  9. Windows 记事本保存会默认 GBK,上传服务器直接乱码

  10. 批量转码工具:Notepad++ 批量转为UTF-8(无BOM)重新上传

  11. 三、特殊场景

  12. 静态 html/css/js 乱码:Nginx/Apache 没配置默认编码 + 文件编码不一致

  13. 只有数据库内容乱码,固定文字不乱:只需要修正数据库连接 SET NAMES 和表编码

  14. Linux 服务器系统编码问题

  15. # 查看系统编码 locale # 临时改 export.UTF-8

页面 meta + 程序 header + web 服务 charset + 数据库 set names + 文件保存编码,五项全统一 UTF8 即可

文章由否玩代码编辑 https://www.fouwan.com