php网页抓取乱码(一般来说,乱码的出现有2种原因,中文就倒霉了)

优采云 发布时间: 2022-01-11 03:20

  php网页抓取乱码(一般来说,乱码的出现有2种原因,中文就倒霉了)

  一般来说,出现乱码的原因有两个。首先,错误的编码(charset)设置导致浏览器解析错误的编码,导致满屏的“天书”乱七八糟。编码打开,然后保存。例如,文本文件最初以 GB2312 编码,但以 UTF-8 编码打开和保存。要解决上面的乱码问题,首先要知道开发的哪些方面涉及到编码:

  1、文件编码:是指保存页面文件(.html、.php等)本身的编码。记事本和 Dreamweaver 在打开页面时会自动识别文件编码,因此问题较少。然而,ZendStudio 不会自动识别编码。它只会根据首选项的配置打开具有某种编码的文件。如果工作中不注意,打开编码错误的文件,修改后保存,就会出现乱码。

  2、页面声明代码:在HTML代码HEAD中,可以使用"meta http-equiv="Content-Type" content="text/html; charset="XXX"/"(这句话必须写在“在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("设置名称 GBK");

  或 mysql_query("SET NAMES GB2312");

  设置MYSQL连接码,保证页面声明码和这里设置的连接码一致(GBK是GB2312的扩展)。如果页面是 UTF-8 编码的,您可以使用:

  mysql_query("设置名称 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头发送给浏览器,它的优先级高于页面中声明的代码,所以浏览器会认错。有两种解决方案。请在配置文件中给虚拟机添加一个AddDefaultCharset GB2312来覆盖全局配置,或者在自己目录下的.htaccess中配置。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线