php网页抓取乱码(php数据库读出乱码是说明原因,中文就倒霉了)
优采云 发布时间: 2021-12-03 15:12php网页抓取乱码(php数据库读出乱码是说明原因,中文就倒霉了)
从php数据库读取的乱码是原因
一般来说,出现乱码的原因有两个。一是编码(charset)设置错误,导致浏览器解析错误编码,导致满屏乱七八糟的《天书》,二是文件解析错误。编码被打开,然后被保存。例如,一个原本用GB2312编码的文本文件被打开并以UTF-8编码保存。解决上述乱码问题,首先需要知道开发中哪些环节涉及到编码:
1、文件编码:指页面文件(.html、.php等)本身保存的编码。Notepad和Dreamweaver在打开页面时会自动识别文件编码,所以不太可能出现问题。但是,ZendStudio 不会自动识别编码。它只会根据首选项的配置打开具有特定编码的文件。如果不注意工作,打开编码错误的文件,修改后保存,会出现乱码。
2、 页面声明代码:在HTML代码HEAD中,可以使用"meta http-equiv="Content-Type" content="text/html; charset="XXX" /" (这句话一定要写在" Before TItle"XXX"/TItle",否则页面会是空白的(IE+PHP only)告诉浏览器这个网页使用的是什么编码。目前GB2312和UTF-主要用于开发中文网站 8 两种编码。
3、数据库连接编码:指在进行数据库操作时,用于向数据库传输数据的编码。这里需要注意的是,不要与数据库本身的编码混淆。比如MySQL内部默认是laTIn1编码,即Mysql数据以laTIn1编码存储,其他编码传输到Mysql的数据会转成latin1编码。
知道了WEB开发中涉及到编码的地方,也就知道出现乱码的原因了:以上三种编码设置不一致。由于大多数各种编码都兼容ASCII,所以不会出现英文符号,中文会倒霉。. 以下是一些常见的错误情况和解决方法:
1、数据库使用UTF8编码,页面声明编码为GB2312,这是乱码最常见的原因。这时候在PHP脚本中直接SELECT数据是乱码,需要在查询前使用:
mysql_query("SET NAMES GBK");
或者 mysql_query("SET NAMES GB2312");
设置MYSQL连接码,确保页面声明码与这里设置的连接码一致(GBK是GB2312的扩展)。如果页面是 UTF-8 编码,您可以使用:
mysql_query("SET NAMES UTF8");
注意是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中添加了AddDefaultCharset UTF-8。这时候服务器会先把HTTP头发送给浏览器,它的优先级比页面中声明的代码要高,浏览器自然会误认。有两种解决方案,