DOMDocument:如何解析像标签一样的bbcode?

问题描述:

我对使用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

正如其他人已经指出的,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.