首页 / 新闻 / 技术博客 / 文章详情
原创

网站出现中文乱码和特殊字符的处理办法

网页出现乱码,在网站设计和开发中经常遇到,但也不用慌,多数情况下不是什么大问题,找到原因对症处理即可。可能有部分朋友对Web标准并不是很清楚,在进行网站开发时,尤其是PHP+MySQL开发网站程序的时候,可能会牵涉到页面编码及数据库问题,这些都会造成网站页面乱码,让开发人员不由得心烦一下。

那么,是什么原因造成网站乱码的呢?下面,无锡做网站公司-马氪软件就为大家介绍一下。

一、编码设置错误

页面编码设置错误,会导致浏览器也以错误的编码进行解析。浏览器无法正确识别,就会出现乱七八糟、杂乱无章的符号,不能正确显示中文。

编码问题导致网页乱码
图1:编码问题导致网页乱码

比如说,做网站的时候,一个系统用的是UTF-8,而另外一个用的是GB2312,这样切换的时候就出现乱码了。

解决方法:统一使用国际编码UTF-8。

UTF-8是国际编码,包括汉字,建议都设置成UTF-8,这样也统一和省心。

注意:当我们编辑网页时,不同的工具会默认一种编码格式。我们应该用UTF-8格式编辑并保存,同时在HTML代码的<head>和</head>之间使用:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

或者HTML5写法:

<meta charset="utf-8">

来使网页显示编码也声明为UTF-8。如果不一致,就会导致乱码。

二、程序或模板文件被以错误编码打开后保存

这种情况很容易出现!

网页设计师或者程序员在制作网站的过程中一定要注意:千万别原来网页是GB2312编码的,却用UTF-8的编码打开再保存,然后覆盖以前服务器上的程序或模板文件,这样最容易出现乱码。

这里,马氪软件先介绍两个最常用的软件给大家:Notepad++、Dreamweaver,都是专门用作代码规范写作的工具。大家在修改页面文件的时候可以使用,以免出现乱码。

通常通过不同的FTP软件上传网站文件的时候,也有可能会出现乱码的情况。大家可以通过专业软件,甚至可以通过电脑自带的文档编辑器进行网页文件的修改和替换。关键是要确认文件的编码格式,并保持统一。

三、数据库编码不对

相信程序员一定清楚,在操作数据库时,不能与数据库本身编码混淆。而MySQL数据库内部默认的编码格式是UTF-8,那么通过其他编码传输给MySQL的数据会被转化为UTF-8编码。

如果网页是GB2312编码,通过PHP脚本中直接查询数据库出来的其实就是中文乱码。

解决方法:

需要先使用:

mysql_query("SET NAMES GBK");

来设置MySQL的连接编码,保存的页面声明编码和数据库设置的一样。(GBK其实就是GB2312的扩展)

PHP编程用到数据库时,数据库的编码也要用和网页显示的编码一致的编码格式,才能把数据库的内容正确显示在网页上,这样才不会出现乱码问题。

更现代的做法是使用mysqli_set_charset()或PDO连接时指定字符集,例如:

$mysqli->set_charset("utf8mb4");

或者:

$pdo = new PDO("mysql:host=localhost;dbname=test;charset=utf8mb4", $user, $pass);

四、Apache服务器设定了服务器全局默认编码

我们这里就不去深入介绍Apache了,马氪软件这边主要是将可能造成乱码的问题总结出来。那么,如果服务器的编码默认了,前面我们三个出现乱码的问题都解决了,网站还是乱码的话,就需要和服务器或者主机服务器商咨询一下。

如果网站的编码是GB2312,服务器httpd.conf加入了AddDefaultCharset UTF-8,服务器会首先发送HTTP头给浏览器,其优先等级肯定是要比页面里的声明编码高,那么浏览器肯定会出现识别错误,乱码也就产生了。

解决方法:

  • 网站管理员可以在自己的虚拟主机中加上 AddDefaultCharset GB2312 来覆盖全局设置;
  • 可以通过 .htaccess 进行配置,这边我们就不去累赘。

五、其他可能原因及补充

除了以上四种常见情况,还有一些细节也可能导致乱码:

  • PHP文件本身的编码:PHP文件如果保存为GB2312,但输出UTF-8内容,也会乱码。建议PHP文件统一保存为UTF-8无BOM格式。
  • 数据库表和字段的字符集:建库建表时就要指定字符集,例如 DEFAULT CHARSET=utf8mb4。如果表是latin1,存中文就会出问题。
  • 浏览器自动识别错误:有些浏览器会尝试自动识别编码,如果识别错了,可以手动在浏览器中切换编码查看,但根本解决还是要靠服务器和页面正确声明。
  • 特殊字符处理:比如引号、破折号、版权符号等,如果编码不一致,也可能显示为“?”或“□”。统一UTF-8通常能解决大部分问题。
  • 使用开发者工具排查:在浏览器按F12,查看Network里Response Headers的Content-Type,确认编码是否与页面声明一致。

六、总结

好了,其实网站的乱码并不可怕。我们可以分析造成乱码的原因,再有针对性地去处理。

核心原则就一条:页面编码、文件编码、数据库编码、服务器编码,尽量统一为UTF-8。

希望这篇文章会对大家有所帮助。如果您在网站开发中遇到乱码问题,欢迎联系无锡做网站公司-马氪软件,我们可以帮您排查和处理。

×

搜索

×

客服

工作时间
周一至周五 9:00-18:00

联系电话
0510-85873959

添加微信
xwx90it