QueryPath中断了包含HTML字符串的脚本标记

时间:2014-04-28 16:50:59

标签: php html-parsing querypath

想知道是否有其他人遇到过这个问题,以及他们是否找到了解决方案。

我有一个应用程序使用QueryPath的htmlqp()方法解析网页(我无法控制)。

我遇到的问题是,每当一个页面被解析时,碰巧有一个内嵌<script>标签,其中有一些javacript,它也有一些HTML字符串在其中引用,QueryPath的writeHTML()方法试图修复&#34;通过在javascript中放入换行符,结束标记和其他废话来反转HTML,从而打破页面上的所有javascript(在某些情况下,HTML)。

例如:

<script>
     var $jQ = jQuery.noConflict();
     // Use jQuery via $jQ(...)
     $jQ(document).ready(function(){
       $jQ("#mktFrmSubmit").wrap("<div class='buttonSubmit'></div>");
       $jQ(".buttonSubmit").prepend("<span></span>");
     });
   </script>

-becomes -

<script>
     var $jQ = jQuery.noConflict();
     // Use jQuery via $jQ(...)
     $jQ(document).ready(function(){
       $jQ("#mktFrmSubmit").wrap("<div class='buttonSubmit'></script>
</div>");
       $jQ(".buttonSubmit").prepend("<span></span>");
     });
显然,后者明显破裂。

有谁知道如何阻止QueryPath这样做?或者可能只是忽略一般<script>标签中的内容?

感谢。

1 个答案:

答案 0 :(得分:1)

我们建议使用HTML5-PHP库来解析HTML。 PHP中内置的旧版HTML4.01解析器(通过libxml)对JavaScript来说并不是特别好。但是新的HTML5 PHP库是为处理这种情况而构建的。

这是图书馆:

https://github.com/Masterminds/html5-php

Matt Farina写了一篇很好的介绍,一起使用这两个库:

http://engineeredweb.com/blog/2014/querypath-html5-php/