东燕西飞 2023-04-26 20:02 采纳率: 83.3%
浏览 49
已结题

怎么精准的获取网页编码,并转成UTF8



function htmlConvertEncode($html){
    // 检测编码
    $encode = mb_detect_encoding($html, array("ASCII","UTF-8","GB2312","GBK","CP936","BIG5","EUC-CN"));
    // 转码
    if($encode != 'UTF-8'){
        return mb_convert_encoding($html, 'UTF-8', $encode);
    }
    // 返回字符集
    if('UTF-8' === true){
        return $encode;
    }
    return $html;
}

我这个代码有个问题,就是少数的网页检测不出来编码。或者有没什么办法,能把所有非UTF8的代码转成UTF8?最好能全面点的

  • 写回答

4条回答 默认 最新

  • CF2301_77400554X 2023-04-27 00:13
    关注

    引用chatgpt部分指引作答:
    您可以尝试使用以下代码,以确保从任何编码转换为UTF-8,并获取网页的准确编码:

    function htmlConvertEncode($html){
        // 获取字符集
        $encode = '';
        preg_match('/<meta.+?charset=["\']?([-\w]+)/i', $html, $matches);
        if(!empty($matches)){
            $encode = strtoupper($matches[1]);
        } else {
            $encode = mb_detect_encoding($html, array("ASCII","UTF-8","GB2312","GBK","CP936","BIG5","EUC-CN"));
        }
        // 转码
        if($encode != 'UTF-8'){
            $html = iconv($encode, 'UTF-8//IGNORE', $html);
        }
        return $html;
    }
    

    此函数首先检查是否存在meta标记,如果有,则从中提取编码。否则,使用mb_detect_encoding函数检测编码。接下来,使用iconv函数将HTML转换为UTF-8编码。

    请注意,这种方法仅适用于HTML文档中存在meta标记的情况。如果网页中没有meta标记,则可能需要更复杂的技术来检测编码。

    另外,请注意,这个函数在转换编码时使用了//IGNORE选项,以确保无效的字符不会导致错误。但是,这也可能会导致一些信息的丢失,所以请注意使用。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月9日
  • 已采纳回答 5月1日
  • 赞助了问题酬金15元 4月26日
  • 创建了问题 4月26日