2011-05-09 59 views
2

我有一個HTML輸出,我從一個RSS源拉動,這是somethig這樣的:如何從PHP中的字符串獲取html標記?

<div> 
    <p> 
     Some text 
    </p> 
    <iframe src="http://www.source.com"></iframe> 
</div> 

的問題是,我只需要iframe標籤的ATTR「SRC」,有什麼辦法獲得它與PHP?正則表達式可能?

在此先感謝!

回答

2

我推薦DOMDocumentSimpleXML

像這樣的東西可能會給你的想法。

var_dump(simplexml_load_string($rss_feed)); 
+1

我認爲DOM文檔將是一個小更強大的,如果HTML沒有完全形成的SimpleXML。另外,我猜你必須單獨處理RSS和它包含的HTML,因爲HTML應該被編碼成RSS的實體,才能正確。 – Endophage 2011-05-09 17:48:29

+0

如果你只想要'src'屬性,你就不需要更強大的*。在這種情況下,IMO,SimpleXML的*簡單*性質是正確的。 – 2011-05-09 17:53:24

+0

正如我所說,這是HTML我是擔心無效的XML。看看這個SO帖子http://stackoverflow.com/questions/2890120/php-processing-invalid-xml如果你仍然認爲這會比只使用DOMDocument自動糾正錯誤的HTML更容易。 – Endophage 2011-05-09 21:08:53

0

我不是正則表達式的專家,但一個替代辦法是對"商標使用explode並獲得array[1]這樣的:

$rssFeed = '<div> 
    <p> 
     Some text 
    </p> 
    <iframe src="http://www.source.com"></iframe> 
</div>'; 

$rssArray = explode('"', $rssFeed); 

echo $rssArray[1]; 

這需要你的RSS提要很但一致的是,如果「某些文本」部分包含"標記,則會發生混亂,並且您會得到錯誤的字符串。

您可以通過陣列查看以httpwww開頭的所有內容來解決錯誤,但同樣需要非常一致的RSS提要,因此您必須爲自己判斷是否可以完成足夠好的工作。

3

如果你一直想起來了,你上面列出的數據,你可以使用一個簡單的字符串,使用src=""><iframe字符串位置來指定子串你想要的:

$html = '<div><p>Some text</p><iframe src="http://www.source.com"></iframe></div>'; 

$start = strpos($html, 'src="') + 5; 
$length = strpos($html, '"></iframe') - $start; 
$src = substr($html, $start, $length); 

echo $src; 

編輯 - 修復代碼並分成多行。這可能很容易成爲單線,但 - 認爲如果我分成多行,就會更容易理解。

0

你可以用一個小命令行perl腳本解析這個輸出。這可以是相當強大的,這取決於你製作正則表達式的一般程度。

例如,

$command = "echo your_html_output | perl -pe 's/src=\"(.*)\"/$1/'"; # Capture what is in between src=" and the " (the closing quote)

$output = shell_exec("$command");

相關問題