【问题标题】:Phpquery dom parser changing the contents inside the script tagphpquery dom解析器更改脚本标签内的内容
【发布时间】:2012-08-10 12:09:02
【问题描述】:

Phpquery dom 解析器更改 javascript 标签内的内容。我使用以下代码

$pq         = phpQuery::newDocument($html);//$html -> grab the page using curl
echo $pq->html();

实际浏览器页面查看源

<script type="text/javascript">
    $('#div-id').append(
           '<div class="tool">'
                +'<div class="t1"></div>'
                +'<div class="t2"></div>'
           +'</div>'
   );
</script>

使用phpquery dom后

<script type="text/javascript">
        $('#div-id').append(
               '<div class="tool">'
                    +'<div class="t1"></script>
</div>'
                    +'<div class="t2"></div>'
               +'</div>'
       );
    </script>

一个额外的结束脚本标记正在插入 dom 解析器。请帮助我如何解决这个问题。提前致谢

【问题讨论】:

  • pq($script)-&gt;contents(); 返回什么?

标签: phpquery


【解决方案1】:

我不确定这是否完全回答了您的问题,似乎它可能是一个错误,但这是我发现的:

当我像这样调用html() 时:$pq-&gt;html() 我得到以下信息

<script type="text/javascript">
    $('#div-id').append(
           '<div class="tool">'
                +'<div class="t1"/>'
                +'<div class="t2"/>'
           +'</div>'
   );
</script>

但是当我这样做时:

foreach($pq->find('script') as $script){
    echo pq($script)->html();
}

我得到了正确的 html

$('something else').append(
       '<div class="tool">'
            +'<div class="t1"></div>'
            +'<div class="t2"></div>'
       +'</div>'
);

我认为这是一个错误,我将报告它。如果我有任何消息,我会告诉你的。

【讨论】:

【解决方案2】:

在将 html 加载到 phpQuery 之前,我会替换所有脚本标记。并且在所有操作之后,替换回脚本。

function str_replace_once($search, $replace, $text)
{
    $pos = strpos($text, $search);
    return $pos!==false ? substr_replace($text, $replace, $pos, strlen($search)) : $text;
}
function replaceScripts($js_atricle_html){
    preg_match_all('/<script.*?>[\s\S]*?<\/script>/', $js_atricle_html, $tmp);
    $scripts_array = $tmp[0]; 
    foreach ($scripts_array as $script_id=>$script_item){
        $js_atricle_html = self::str_replace_once($script_item, '<div class="script_item_num_'.$script_id.'"></div>', $js_atricle_html);
    }

    return array('content'=> $js_atricle_html, 'scripts_array'=>$scripts_array);
}
function unreplaceScripts($aticle_content, $scripts_array){
    preg_match_all('/<div class="script_item_num_(.*?)"><\/div>/', $aticle_content, $tmp);
    foreach ($tmp[1] as $script_num_item){
        $aticle_content = str_replace('<div class="script_item_num_'.$script_num_item.'"></div>', $scripts_array[$script_num_item], $aticle_content);
    }
    return $aticle_content;
}

【讨论】:

    猜你喜欢
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 2018-05-18
    • 1970-01-01
    • 2019-03-06
    • 2013-11-11
    • 2017-08-20
    相关资源
    最近更新 更多