2013-03-16 105 views
2

这是我的第一篇文章,我很抱歉,如果我做错了,但在这里我们去:解析CDATA从Javascript

我一直在努力应该从网站凑值的项目。这些值是javascript数组中的变量。我使用的是PHP Simple HTML DOM,它与普通脚本一起使用,但不能保存在CDATA块中。因此,我正在寻找一种方法来擦除CDATA块中的数据。不幸的是,我能找到的所有帮助都是针对XML文件的,而我正在从HTML文件中抓取。

我试图刮JavaScript是一种如下:

<script type="text/javascript"> 
//<![CDATA[ 
var data = [{"value":8.41,"color":"1C5A0D","text":"17/11"},{"value":9.86,"color":"1C5A0D","text":"18/11"},{"value":7.72,"color":"1C5A0D","text":"19/11"},{"value":9.42,"color":"1C5A0D","text":"20/11"}]; 
//]]> 
</script> 

我需要刮的是“价值”在var数据-variable。

问题是我试图替换对象上的CDATA字符串。 下面的代码工作完全:-)

include('simple_html_dom.php'); 

$lines = file_get_contents('http://www.virtualmanager.com/players/7793477-danijel-pavliuk/training'); 

$lines = str_replace("//<![CDATA[","",$lines); 
$lines = str_replace("//]]>","",$lines); 

$html = str_get_html($lines); 

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

如果需要,我会为您提供更多的信息。

+0

在将HTML文本传递给解析器之前缓冲HTML文本,然后使用search-and-replace移除'// <![CDATA ['和'//]]>'构造。他们完全没有意义,已经有多年了。 – millimoose 2013-03-16 12:52:33

+0

另外:你在示例URL中有奇怪的空格。这是一个错字吗?因为问题可能是你根本无法加载页面。也就是说,'$ html-> find('script')'甚至找到*任何* *? – millimoose 2013-03-16 12:53:43

+0

这是一个错字,我现在修复了它。我试图删除CDATA,但我后来得到这个错误:“致命错误:调用一个非对象的成员函数find()...” 我已经更新了我现在正在做的事。 – user1807556 2013-03-16 13:06:11

回答

2

体面的HTML解析器不应该要求将Javascript包装在CDATA块中。如果他们把它扔了,刚刚从HTML解析之前删除它们,做这样的事情:

  1. 下载HTML文件转换成字符串,使用file_get_contents()或者如果该功能您的主机禁用HTTP支持cURL
  2. 摆脱使用str_replace()
  3. 解析从DOM对象之前,使用简单DOM的str_get_html()
  4. 过程中的清洁字符串的HTML //<![CDATA[//]]>位。