php网页抓取乱码(一般来说,乱码的出现有2种原因,你知道吗?)
优采云 发布时间: 2021-11-16 14:25php网页抓取乱码(一般来说,乱码的出现有2种原因,你知道吗?)
一般来说,出现乱码的原因有两个。一是设置了错误的编码(charset),导致浏览器用错误的编码解析,导致满屏乱七八糟的《天书》,二是文件错误编码为打开,然后保存。例如,一个原本用GB2312编码的文本文件,用UTF-8编码打开并保存。解决上述乱码问题,首先需要知道开发中哪些环节涉及到编码:
1、文件编码:指页面文件(.html、.php等)本身保存的编码。Notepad和Dreamweaver在打开页面时会自动识别文件编码,所以不太可能出现问题。但是,ZendStudio 不会自动识别编码。它只会根据首选项的配置打开具有特定编码的文件。如果工作中不注意,打开编码错误的文件,修改后保存,会出现乱码(我深有体会)。
2、 页面声明编码:在 HTML 代码 HEAD 中,可以用来告诉浏览器网页使用的编码。目前,在中文网站的开发中,XXX主要使用两种编码:GB2312和UTF-8。
3、数据库连接编码:指在进行数据库操作时,用于向数据库传输数据的编码。这里需要注意的是,不要与数据库本身的编码混淆。比如MySQL内部默认是latin1编码,即Mysql数据以latin1编码存储,其他编码传输到Mysql的数据会转换成latin1编码。
知道了WEB开发中涉及到编码的地方,也就知道出现乱码的原因了:以上三种编码设置不一致。由于大多数各种编码都兼容ASCII,所以不会出现英文符号,中文会倒霉。. 以下是一些常见的错误情况和解决方法:
1、 数据库使用UTF8编码,页面声明编码为GB2312,这是乱码最常见的原因。这时候直接在PHP脚本中Select数据是乱码,需要在查询前使用:
mysql_query("SETNAMESGBK");
设置MYSQL连接码,确保页面声明码与这里设置的连接码一致(GBK是GB2312的扩展)。如果页面是 UTF-8 编码,您可以使用:
mysql_query("SETNAMESUTF8");
注意是UTF8而不是一般的UTF-8。如果页面上声明的代码与数据库的内部代码一致,则可能没有设置连接代码。
注:其实MYSQL的数据输入输出比上面说的还要复杂。MYSQL配置文件my.ini中定义了两个默认代码,分别是[client]中的default-character-set和[mysqld]中的default。-character-set 分别设置客户端连接和内部数据库使用的默认编码。我们上面指定的编码实际上是MYSQL客户端连接服务器时的命令行参数character_set_client,告诉MYSQL服务器接收到的客户端数据是什么编码,而不是使用默认的编码。
2、 页面声明代码与文件本身不一致。这种情况很少发生,因为如果代码不一致,在创建页面时浏览器会看到乱码。更多的时候是发布后修改了一些小BUG,打开代码错误的页面然后保存造成的。或者使用一些FTP软件直接在线修改文件,比如CuteFTP,因为软件编码配置错误导致转换错误编码。
3、一些租虚拟主机的朋友,很明显上面三种编码设置正确或者出现乱码。比如网页是GB2312编码的,但是IE等浏览器打开时总是识别为UTF-8。网页的HEAD已经说明是GB2312了。手动修改浏览器编码为GB2312后,页面显示正常。原因是服务器Apache设置了服务器的全局默认编码,在httpd.conf中添加了AddDefaultCharsetUTF-8。这时候服务器会先把HTTP头发送给浏览器,它的优先级比页面中声明的代码要高,浏览器自然会误认。有两种解决方案。
以上就是PHP和MySQL开发中页面乱码的产生及解决的详细内容。更多详情请关注其他相关html中文网站文章!