为什么phpquery会丢失html片断?

发布于 2022-09-12 03:26:24 字数 2496 浏览 35 评论 0

昨天querylist在运行的时候,我发现有个列表页http://xiaohua.zol.com.cn/len...
总是报错,其相邻的页面
http://xiaohua.zol.com.cn/len...
http://xiaohua.zol.com.cn/len...

却没问题。我在这个出错的页面也没发现有什么问题。因为页面用了gbk编码,用querylist的时候要涉及到setHtml()操作,一旦setHtml()之后,这个页面的数据就会在某个地方丢失一行</li>,然后querylist再执行规则就会报错。
经过研究,我发现这个问题是由querylist引用的phpquery导致的。
为验证这个问题,我直接用phpquery去操作这个页面的html,结果也会丢失</li>。

目前就发现这一个页面有问题:http://xiaohua.zol.com.cn/lengxiaohua/34.html
具体表现为浏览器查看html源代码时,可以看到317行和318行之间少了</li>,这样会导致后续再query的时候出错。
如下:
</div>

>就是这里这里少了一句</li>

<li class="article-summary">
<span class="article-topbar"></span>
<span class="article-title">最爱冷笑话,开心还能练大脑</span>

请高手帮我测试分析下什么原因。
我的代码如下:

<?php
    ini_set('display_errors',1); //错误信息
    ini_set('display_startup_errors',1); //php启动错误信息
    error_reporting(-1);
    require('phpQuery/phpQuery.php');
    $listurl = 'http://xiaohua.zol.com.cn/lengxiaohua/34.html';
    $listhtml = file_get_contents($listurl);
    $listhtml = mb_convert_encoding($listhtml,'UTF-8','GBK');
    $argv = array("./cli/phpquery","--find",".article-list","--contents");
    phpQueryCli($listhtml, array_slice($argv, 1));
    function phpQueryCli($markup, $callQueue) {
        $pq = phpQuery::newDocument($markup);
        $method = null;
        $params = array();
        foreach($callQueue as $param) {
            if (strpos($param, '--') === 0) {
                if ($method) {
                    $pq = call_user_func_array(array($pq, $method), $params);
                }
                $method = substr($param, 2);    // delete --
                $params = array();
            } else {
                $param = str_replace('\n', "\n", $param);
                $params[] = strtolower($param) == 'null'
                ? null
                : $param;
            }
        }
        if ($method)
            $pq = call_user_func_array(array($pq, $method), $params);
        if (is_array($pq))
            foreach($pq as $v)
                print $v;
        else
            print $pq."\n";
        //var_dump($pq);
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

断念 2022-09-19 03:26:24

目前看,问题就是Html内容中带有一个尖括号<。
这个位置:
6、晚上在星巴克喝了杯特浓咖啡,结果现在怎么都睡不着觉了。老贵了想想就心疼。 <......

有没有高手帮我看看这种问题该如何从程序上解决?(我感觉这是php底层的一个bug,因为我昨天直接用domdocument也存在同样的问题。是否涉及到libxml2我还没研究过)

image.png

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文