首页/ 填坑/ 文章详情

网络小说转换txt中文乱码

喜欢某个网络小说,想下载txt,发现可供下载txt寥寥可数。txt下载成功后,文字排版乱,缺少章节等情况时有出现。最最最不可忍,下载txt过程特别慢,全民普及100M的网速,搁在这里只能龟速。

外部环境无法提供良好服务,唯有利用自身过硬的技术,服务于自己。网络小说早已存在互联网上,唯独缺少下载txt功能。利用Iframe引入网络小说页面,Jquery选择器获取数据,整合数据后,自动转换成txt。

Iframe页面加载成功后,Jquery选择器却出现意外情况。由于Iframe加载的页面属于第三方,触发保护机制:跨域。对此不能直接加载页面,需要用PHP的file_get_contents抓取HTML数据,拉回本地后再用Iframe渲染。

拉回来的数据,除了英文与数字,中文出乱码,原来被抓取的网页字符集使用GBK或GB2312。

GB2312转UTF-8:

PHPheader("Content-type: text/html; charset=utf-8");

$url = 'https://xxx.xxx.com'
$html = file_get_contents('compress.zlib://'.$url);
$html = iconv("GB2312", "UTF-8//IGNORE",$html);

print_r($html);

有些网站本身使用UTF-8字符集,如果再转义,正确也变错的。人工判断肯定不行,所以我们需要自动判断该网站是否UTF-8字符集。

是否UTF-8字符集:

PHP/**
 * 是否UTF-8字符集
 * @method isUtf8
 * @param $str 字符串
 * @return bool
 */
function isUtf8($str){
    $len = strlen($str);
    for($i = 0; $i < $len; $i++){
        $c = ord($str[$i]);
        if ($c > 128) {
            if (($c > 247)) {
                return false;
            } else if ($c > 239) {
                $bytes = 4;
            } else if ($c > 223) {
                $bytes = 3;
            } else if ($c > 191) {
                $bytes = 2;
            } else {
                return false;
            }

            if (($i + $bytes) > $len)  {
                return false;
            }

            while ($bytes > 1) {
                $i++;
                $b = ord($str[$i]);
                if ($b < 128 || $b > 191) {
                    return false;
                }
                $bytes--;
            }
        }
    }

    return true;
}

优化后:

PHPheader("Content-type: text/html; charset=utf-8");

$url = 'https://xxx.xxx.com'
$html = file_get_contents('compress.zlib://'.$url);

if(!isUtf8($html)) {
    $html = iconv("GB2312", "UTF-8//IGNORE",$html);
}

print_r($html);

文章评论0 records

最新 最早

0

最新评论Latest comments

big2catbig2cat 08-27 16:11
然而没什么用,smartpss不兼容老录像机,就算能看回放,很多时间点在回放里也看不到
HentaiCatHentaiCat 2020-12-30 10:22
考科目二全程很紧张,考了三次才过,有次侧方入库直接pass,100分扣完,呜呜呜~
猫猫酱猫猫酱 2020-11-12 10:56
一入多肉深似海,说多都是泪
soulkunsoulkun 2020-11-05 15:54
IconFont的图标真的很好用!!!
无限链霉球菌无限链霉球菌 2020-11-03 11:41
药店,了解一下(`・ω・´)