Phpquery dom解析器更改javascript标记内的内容。我使用以下代码
$pq = phpQuery::newDocument($html);//$html -> grab the page using curl
echo $pq->html();
Actuall浏览器页面查看源
<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解析器。请帮我解决这个问题。提前致谢
答案 0 :(得分:0)
我不确定这是否完全回答了你的问题,似乎它可能是一个错误,但这是我发现的:
当我这样打html()
时:$pq->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>'
);
我认为这是一个错误,我将报告它。如果我听到有关此事的消息,我会通知你。
答案 1 :(得分:0)
我在将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;
}