• 1
  • 新人请关照

为什么phpquery会丢失html片断?

昨天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);
    }
阅读 246
评论
    1 个回答
    • 1
    • 新人请关照

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

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

    image.png

      撰写回答

      登录后参与交流、获取后续更新提醒