我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

说起querylist与乱码的问题,苏南大叔在这篇文章里面,做个简单的总结。总结的方案,其实就三种,前两种是querylist内置的,而后面一种是php内置的(部分情况下,可能需要iconv.so组件)。

苏南大叔:QueryList 乱码问题,编码转换解决方案总结 - querylist-encoding
QueryList 乱码问题,编码转换解决方案总结(图1-1)

出现乱码的问题很多,解决方法也不尽相同,要视具体情况而定,以下几种乱码解决方案仅供参考。

QueryList内置的解决方案encoding()

使用编码转换插件,设置输入输出编码

$html =<<<STR
<div>
    <p>这是内容</p>
</div>
STR;
$rule = array(
    'content' => array('div>p:last','text')
);
$data = QueryList::html($html)->rules($rule)
                ->encoding('UTF-8','GB2312')->query()->getData();

QueryList内置的解决方案removeHead()

值得说明的是:removeHead()encoding()并不冲突。如果encoding()设置输入输出参数仍然无法解决乱码,那就使用 removeHead()方法移除html头部。

$html =<<<STR
<div>
    <p>这是内容</p>
</div>
STR;
$rule = array(
    'content' => array('div>p:last','text')
);
$data = QueryList::html($html)->rules($rule)
                ->removeHead()->query()->getData();
// 或者
$data = QueryList::html($html)->rules($rule)
                ->encoding('UTF-8','GB2312')->removeHead()->query()->getData();

利用iconv()手动转码

iconv转码后的页面,传给QueryList进行进一步处理。

$url = 'http://top.etao.com/level3.php?spm=0.0.0.0.Ql86zl&cat=16&show=focus&up=true&ad_id=&am_id=&cm_id=&pm_id=';
//手动转码
$html = iconv('GBK','UTF-8',file_get_contents($url));
$data = QueryList::html($html)->rules(array("text"=>array(".title a","text")))->query()->getData();
print_r($data);

相关链接

总结

面对乱码问题,苏南大叔表示:转换编码吧,少年。没有别的捷径可以走的。更多querylist经验文章,请点击:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   querylist