Php 在PECL BBCode中定义需要父元素的元素

Php 在PECL BBCode中定义需要父元素的元素,php,dom,bbcode,pecl,Php,Dom,Bbcode,Pecl,我定义了以下规则,允许用户通过bbcode创建表: 'table' => array( 'type' => BBCODE_TYPE_NOARG, 'open_tag' => '<table>', 'close_tag' => '</table>', 'childs' => 'tr', 'tr' => array

我定义了以下规则,允许用户通过bbcode创建表:

        'table' => array(
            'type' => BBCODE_TYPE_NOARG,
            'open_tag' => '<table>',
            'close_tag' => '</table>',
            'childs' => 'tr',
        'tr' => array(
            'type' => BBCODE_TYPE_NOARG,
            'open_tag' => '<tr>',
            'close_tag' => '</tr>',
            'childs' => 'th,td',
            'parent' => 'table'),
        'th' => array(
            'type' => BBCODE_TYPE_NOARG,
            'open_tag' => '<th>',
            'close_tag' => '</th>',
            'parent' => 'tr'),
        'td' => array(
            'type' => BBCODE_TYPE_NOARG,
            'open_tag' => '<td>',
            'close_tag' => '</td>',
            'parent' => 'tr'),
“表”=>数组(
'type'=>BBCODE\u type\u NOARG,
'打开标签'=>'',
'关闭标签'=>'',
'childs'=>'tr',
'tr'=>数组(
'type'=>BBCODE\u type\u NOARG,
'打开标签'=>'',
'关闭标签'=>'',
‘childs’=>‘th,td’,
'父'=>'表'),
'th'=>数组(
'type'=>BBCODE\u type\u NOARG,
'打开标签'=>'',
'关闭标签'=>'',
“父项”=>“tr”),
'td'=>阵列(
'type'=>BBCODE\u type\u NOARG,
'打开标签'=>'',
'关闭标签'=>'',
“父项”=>“tr”),
其思想是,您可以定义表格、表格行或表格单元格,但:

  • 只能将
    TR
    作为其子级
  • TR
    只能将
    表作为其父级,并且只能将
    TH
    TD
    作为其子级
  • TH
    TD
    只能将
    TR
    作为其父级
此家长/孩子指令在此处简要记录:


然而,基础实验表明,“父母”指令似乎没有做任何事情。也就是说,根据上述规则,它将愉快地在顶层解析
TR
元素。这似乎是一个非常奇怪的设计决策,所以我想知道我是否做错了什么?此外,由于实现该指令的论坛是在一个表中列出的,当有人这样做时,它会打破规则论坛显示相当壮观。

我不知道BBCode解析器,但是如果使用
tr
而没有
表,您希望发生什么?如果删除整个块是合适的,可能会通过HTMLPurifier运行这个输出,我想这会认为它是无效的HTML。应该发生的是[tr]保留字符串中的文本[tr]。我发现我可以通过声明顶级元素并显式地将[tr]和[td]列入黑名单来解决这个问题作为孩子,但这也不能完全解决问题,因为你可以将它们放在任何其他标签中。我能想到的直接解决这个问题的唯一方法是明确地将每个标签中的tr和td列入黑名单,但当有明显的“正确”时,我不愿意这样做白名单elemsI不知道BBCode解析器,但是如果使用
tr
而没有
,你想怎么办?如果删除整个块是合适的,也许可以通过HTMLPurifier运行这个输出,我想这会认为它是无效的HTML。应该发生的是[tr]仍然是一个文本我发现我可以通过声明一个顶级元素并显式地将[tr]和[td]列入黑名单来解决这个问题作为孩子,但这也不能完全解决问题,因为你可以把它们放在任何其他标记中。我能想到的直接解决这个问题的唯一方法是明确地将每个标记中的tr和td列入黑名单,但当有明确的“正确”方法将元素列入白名单时,我不愿意这样做