phpfetcher icon indicating copy to clipboard operation
phpfetcher copied to clipboard

网页charset和实际编码不一致,希望能修改

Open yudianguo opened this issue 8 years ago • 7 comments

使用mb_detect_encoding 可检测出实际编码,然后再进行转换。 http://tech.qq.com/ 【腾讯科技频道】 标记的是utf8 实际则是EUC-CN编码

yudianguo avatar Jan 16 '17 09:01 yudianguo

不知道这个方法可行么

yudianguo avatar Jan 16 '17 09:01 yudianguo

应该是可行的,你是在爬取tech.qq.com的内容时碰到了乱码问题? 如果有一个具体的出错example我这边会更好修复一些。

fanfank avatar Jan 16 '17 10:01 fanfank

爬取tech.qq.com 所有的中文都会变成乱码,使用mb_detect_encoding方法查出实际编码EUC-CN;你可以试一试爬取http://tech.qq.com/网站,里面的中文都是乱码。

yudianguo avatar Jan 16 '17 11:01 yudianguo

好的,我今晚回去看下

fanfank avatar Jan 16 '17 12:01 fanfank

@yudianguo 我这边detect的结果是FALSE,你试一下在源码的这一行: https://github.com/fanfank/phpfetcher/blob/master/Phpfetcher/Page/Default.php#L363

后面加上var_dump(mb_detect_encoding($this->_strContent));,看看得到的结果是什么?

fanfank avatar Jan 16 '17 13:01 fanfank

我现在就是用 mb_detect_encoding($this->_strContent, array("ASCII","UTF-8","GB2312","GBK"));这个检测了一下,返回的东西和白天试的不一样这会返回的编码是CP936。可能是他们网站做了什么处理了把。我看有人介绍说不建议使用这中方式检测编码,说是不准确

yudianguo avatar Jan 16 '17 13:01 yudianguo

是的,之前我也是尝试过用这种方法,效果不太好。后来是想着既然页面内有编码标识就直接用,如果实际编码和声明的不一致,那么就和规范不统一了。这里我怀疑是另外一些问题导致了乱码,我再看看

fanfank avatar Jan 17 '17 02:01 fanfank