2011-09-22 103 views
2

假設串$ A持有PHP爆炸字符串由HTML標記

<p>Phasellus blandit enim eget odio euismod eu dictum quam scelerisque. 
</p><p>Sed ut diam nisi.</p><p>Ut vestibulum volutpat luctus.</p> 

我怎樣才能爆發出此陣

Array(
    [0] = '<p>Phasellus blandit enim eget odio euismod eu dictum quam scelerisque.</p>'; 
    [1] = '<p>Sed ut diam nisi. Ut vestibulum volutpat luctus.</p>'; 
    [2] = '<p>Ut vestibulum volutpat luctus.</p>'; 
) 

回答

5

使用DOM文檔和DOMXPath:

$dom = new DOMDocument(); 
$dom->loadHTML($a); 
$domx = new DOMXPath($dom); 
$entries = $domx->evaluate("//p"); 
$arr = array(); 
foreach ($entries as $entry) { 
    $arr[] = '<' . $entry->tagName . '>' . $entry->nodeValue . '</' . $entry->tagName . '>'; 
} 
print_r($arr); 
+1

您可能會考慮調用'libxml_use_internal_errors(true);'首先避免DOMDocument污染您的標準錯誤處理程序和HTML相關錯誤。實現你自己的處理程序來代替錯誤。有關更多信息,請參閱http://php.net/manual/de/domdocument.loadhtml.php中的註釋。 –

5
<?php 
$ps = array(); 
$count = preg_match_all('/<p[^>]*>(.*?)<\/p>/is', $a, $matches); 
for ($i = 0; $i < $count; ++$i) { 
    $ps[] = $matches[0][$i]; 
} 

這可能是一種方式這一點。或者(如果只需要一個簡單的解決方案有點大材小用),你可以使用一個循環與strpos

+0

和[這](http://php.net/manual/ ru/class.domdocument.php)是正確的方法 – k102

+0

preg對於像這樣的基本解析更快。 – drew010

+0

我們正在談論php和它的緩慢。無論如何,你可以節省幾個毫秒,但要花幾個小時才能讓這段代碼處理更復雜的字符串。 – k102