2015-12-02 56 views
2

我對使用DOMDocument的查詢有問題。 我會在字符串中使用「bbcode like」標籤並查找屬性data_id。DOMDocument:如何解析像標籤一樣的bbcode?

我使用下面的代碼THP但我總是得到這些警告: 警告:DOMXPath ::查詢():無效的表達

的 「設置高亮樣」 的代碼,我想恩用途:

[sondage data_id=1] 

PHP代碼

$doc = new DOMDocument(); 
$doc->loadHTML($row->text); 
$selector = new DOMXPath($doc); 

$result = $selector->query('//[sondage'); 

foreach($result as $node) { 
    echo $node->getAttribute('data_id'); 
} 

感謝您的幫助

+0

它無效的HTML,所以沒有什麼可以解析的。 – Youri

+0

對不起,DOMDocument只接受XML標籤。 –

+0

@Youri有另一種解決方案嗎?獲取所有bbcode標籤並獲取data_id屬性? – Raphael

回答

0

正如其他人已經指出的,bbcode不是值XML標記,所以不會被解析。

假設你所有的方括號BB代碼(A重要的假設,授予),你可以用尖括號「取代」他們的零件,使它們看起來像標籤:

$text = str_replace(array("[","]"),array("<",">"),$row->text; 
//$text now contains 'XML-ised' content 

但是,如果你有任何方括號不在BB代碼,這是可能的,這將打破...

或者,你可以進一步使用正則表達式讓你的所有BBCode的元素,然後分析他們從那裏:

$text = $row->text; 
preg_match_all('#\[[a-z]+.*?\](.*?)\[/[a-z]+\]#is',$text,$matches); 
//$matches will contain all your BBCode, which you can then parse further as required.