2013-03-16 114 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[//]]>位。