采集页面编码GBK处理注意的问题

现在项目基本都是UTF-8编码的,但是有个别网站还是GBK编码的,比如搜狗。采集到的GBK编码的页面处理会导致解析不了html内容。

处理方法

    1. 转换页面内容为UTF-8
    1. 替换页面的头部GBK为UTF-8 这一点很重要
     /**
             * 内容处理
             * 把GBK转码为utf-8
             * 头部标识编码 gbk替换成utf-8(采集的时候页面转换成了utf-8编码,header头也一定记得替换成utf-8编码,否则编码就会有问题)
             */
            $content = iconv('GBK', "UTF-8//ignore", $content);
            $content = preg_replace("/gb(k|2312)/i", "utf-8", $content);

之前处理字符串编码问题的方法

function doEncoding($str){
        $encode = strtoupper(mb_detect_encoding($str, ["ASCII",'UTF-8',"GB2312","GBK",'BIG5']));
        if($encode!='UTF-8'){
            $str = mb_convert_encoding($str, 'UTF-8', $encode);
        }
        return $str;
    }

curl 检测响应Content-Type编码是GBK的

    /**
     * 转换gbk编码为utf8
     * @param $html
     * @param $curl_info
     * @return mixed|string
     */
    private function do_html_to_utf8($html, $curl_info)
    {
        if($curl_info && preg_match("/gb(k|2312)/", $curl_info['content_type'], $match) > 0) {
            $encode = $match[0];
            $html = iconv($encode, "utf-8//IGNORE", $html);
            $html = preg_replace("/gb(k|2312)/", "utf-8", $html);
        }
        return $html;
    }

去掉html页面注释正则

$content= preg_replace('#<!--[^\!\[]*?(?<!\/\/)-->#' , '' ,$content); 

原文地址:https://www.cnblogs.com/zqsb/p/11382115.html

时间: 2024-11-11 01:09:19

采集页面编码GBK处理注意的问题的相关文章

utf-8页面展示 gbk编码的js,gbk中有中文

index.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv=&qu

UTF-8和GBK编码之间的区别(页面编码、数据库编码区别)以及在实际项目中的应用

第一节:UTF-8和GBK编码概述 UTF-8 (8-bit Unicode Transformation Format) 是一种针对Unicode的可变长度字符编码,又称万国码,它包含全世界所有国家需要用到的字符,是国际编码,通用性强,是用以解决国际上字符的一种多字节编码.由Ken Thompson于1992年创建.UTF-8用1到4个字节编码UNICODE字符,它对英文使用8位/8Bit(即1个字节/1Byte),中文使用24位/24Bit(3个字节/3Byte)来编码.用在网页上可以同一页

php页面编码与字符操作

我们可以用header来定义一个php页面为utf编码或GBK编码,也可以在html中用meta标签来指定编码 例如:php页面为utf编码    header("Content-type: text/html; charset=utf-8"); 我们通常使用header或meta,下面说一说两者的区别 一.采用meta页面编码 用meta来设置页面编码 1 <meta http-equiv="content-type" content="text/

PHP 页面编码声明方法详解(header或meta)

php的header来定义一个php页面为utf编码或GBK编码 php页面为utf编码 header("Content-type: text/html; charset=utf-8"); php页面为gbk编码 header("Content-type: text/html; charset=gb2312"); php页面为big5编码 header("Content-type: text/html; charset=big5"); 通常情况以

PHP 页面编码声明方法详解(header或meta)(转)

编码格式有两种,一种是php文件本身的编码格式,如 editplus之类的编辑器在保存文件的时候允许你指定文件编码格式:另一种是php输出的文本的编码格式,这个信息只对浏览器生效,方法为<?php header('charset: utf-8;');?>.需要注意的是header方法必须在任意输出之前调用.通常,PHP项目开发工具,如ZendStudio, PHPStorm等都是设置项目的编码方式的,保证项目中的所有文件使用相同格式的编码.而对于WEB输出,通常的方式是在html文件中使用&l

PHP页面编码问题

页面编码统一 MySQL数据库编码.html页面编码.PHP或html文件本身编码要全部一致. 1.MySQL数据库编码:建立数据库时指定编码(如gbk_chinese_ci),建立数据表.建立字段.插入数据时不要指定编码,会自动继承数据库的编码.数据库连接时,也有编码,可以在连接完数据库后,执行mysql_query(‘SET NAMES gbk’);//将gbk换成你的编码,如utf8. 2.html页面的编码,指的是这一行的设置:<meta http-equiv="Content-T

java获取页面编码

文章出自:http://babyjoycry.javaeye.com/blog/587527 在此感谢原作者...\(^o^)/~ 最近研究抓取网页内容,发现要获取页面的编码格式,Java没有现成的实现方法,虽然csdn上有个达人写了一篇文章,附有代码,可惜,我没有找到相关的包,不得已,只好自己动手丰衣足食了. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;

php header设置页面编码

php header设置页面编码 未分类 PHP 页面编码声明方法详解(header或meta) http://www.jb51.net/article/22501.htm PHP 页面编码声明与用header或meta实现PHP页面编码的区别 php的header来定义一个php页面为utf编码或GBK编码 php页面为utf编码 header("Content-type: text/html; charset=utf-8"); php页面为gbk编码 header("Co

PHP 页面编码声明与用header或meta实现PHP页面编码的区别

php的header来定义一个php页面为utf编码或GBK编码 php页面为utf编码 header("Content-type: text/html; charset=utf-8"); php页面为gbk编码 header("Content-type: text/html; charset=gb2312"); php页面为big5编码 header("Content-type: text/html; charset=big5"); 通常情况以