【问题标题】:DOMDocument : how to parse a bbcode like tag?DOMDocument:如何解析类似 bbcode 的标签?
【发布时间】:2015-12-02 14:46:38
【问题描述】:

我对 DOMDocument 使用的查询有疑问。 我将在字符串中使用“bbcode like”标签并找到属性 data_id。

我使用下面的 thp 代码,但我总是收到以下警告: 警告:DOMXPath::query():无效的表达式

我希望你使用的“bbcode like”代码:

[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');
}

感谢您的帮助

【问题讨论】:

  • 它不是有效的 HTML,所以没有什么可以解析的。
  • 抱歉,DOMDocument 只接受 XML 标记。
  • @Youri 你有其他解决方案吗?获取所有 bbcode 标签并获取 data_id 属性?

标签: php domdocument


【解决方案1】:

正如其他人已经指出的那样,bbcode 不是价值 XML 标记,因此不会被解析。

假设你所有的方括号都是 BBCode 的一部分(一个很大的假设,当然),你可以用尖括号“替换”它们,使它们看起来像标签:

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

但是,如果您有任何不是 BBCode 的方括号,它很可能会损坏...

或者,您可以使用正则表达式来获取所有 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.

【讨论】:

    猜你喜欢
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 2012-04-11
    • 1970-01-01
    相关资源
    最近更新 更多