首页/ 填坑/ 文章详情

网络小说转换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

凡心的仙人凡心的仙人 03-18 14:35
谢谢你了!
rantrismrantrism 2023-04-03 11:27
您好~我是腾讯云开发者社区运营,关注了您分享的技术文章,觉得内容很棒,我们诚挚邀请您加入腾讯云自媒体分享计划。完整福利和申请地址请见:https://cloud.tencent.com/developer/support-plan 作者申
唐牛才是食神唐牛才是食神 2022-06-15 10:51
(*°▽°*)八(*°▽°*)♪,解决了
唐牛才是食神唐牛才是食神 2022-06-15 10:49
发现不得了的东西,今晚回去好好研究下...
胖螺胖螺 2022-02-04 00:58
( ゜- ゜)つロ 在写了在写了。看到也有些感慨。因为站长前年在我原博客的留言,让我毅然选择去深造,选择读研,曾经我想过挺多东西的,还是自己本专业的适合我自己。在这先表达感谢。新年快乐!