2015-10-20 50 views
0

的某些部分我試圖讓一個HTML裏面的iframe的src使用該PHP得到一個HTML

preg_match('/src=\'([^\']+)\'/', $fresult, $match); 

但是這個代碼有時會失敗。

一些sugest我使用的DomDocument但我不能找到一個reg EXP樣品

$doc = new DOMDocument(); 
$doc->loadHTML($html); 
foreach ($tags as $tag) { 
    echo $tag->nodeValue; 
} 

如何獲得幀的src值?

樣品

<iframe src='test.com' /> 

我應該有test.com

也是我該怎麼做preg_match_all等價的DomDocument的?

這樣

<html> 
<label class="su">test1</label> 
<label class="su">test2</label> 
<label class="su">test3</label> 
</html> 

這是我應該有TEST1,TEST2和TEST3

我是新來這個DOM PHP的事情陣列結果。所以請不要苛刻。謝謝

+0

你* * NOT **應該在這種情況下使用正則表達式。人們建議DomDocument是因爲它旨在解析HTML。正則表達式無法正確處理語言的嵌套本質。不要在DomDocument中使用正則表達式。 「DomDocument」解決方案應該完全獨立於Regex。 – d0nut

+0

使用'DomDocument :: getElementsByTagName'並搜索'「iframe」'。之後,從返回的元素中獲取'src'屬性。 – d0nut

回答

3

首先,歡迎來到Stack Overflow! 請勿在DOM文檔上使用正則表達式(請參見why)。相反,請堅持PHP DomDocument

這就是說,你可能會得到一個iframe標籤和src像這樣:

$doc = new DOMDocument(); 
$doc->loadHTML(...); 
$frame= $doc->getElementsByTagName('iframe')->item(0); 
$src = $frame->getAttribute('src'); 

關於你的第二個問題,你可能想在DOMXPath看看:

$doc = new DOMDocument(); 
$doc->loadHTMLFile(...); 

$xp = new DOMXPath($dom); 
$labels = $xp->query('//label[@class="su"]');