PHP:从给定文本中过滤特定的html标记

时间:2010-01-30 11:46:06

标签: php xhtml

我搜索了很多,因为过去曾经问过很多这样的问题。但我找不到符合我需要的东西。

我有来自表单的html格式化文本。就像这样:

Hey, I am just some kind of <strong>formatted</strong> text!

现在,我想删除所有不允许的html标签。 PHP的内置strip_tags()方法做得非常好。

但是我想更进一步:我想在内部或不在其他标签内部允许一些标签。我还想定义自己的XML标签。

另一个例子:

I am a custom xml tag: <book><strong>Hello!</strong></book>. Ok... <strong>Hi!</strong>

现在,我希望<strong/>内的<book/>被剥离,但<strong>Hi!</strong>可以保持原样。

所以,我想定义一些我允许或不允许的规则,并希望有任何过滤器完成剩下的工作。

有没有简单的方法呢? Regexp不是我想要的,因为它们无法正确解析html。

此致,Jan Oliver

4 个答案:

答案 0 :(得分:2)

不要认为有这样的事情,我认为即使HTML Purifier也不这样做。

我建议您使用Simple HTML Dom等手动解析XHTML。

答案 1 :(得分:1)

对strip_tags使用第二个参数,这是允许的标记。

$text = strip_tags($text, '<book><myxml:tag>');

我认为如果不使用正则表达式,如果它们不在其他标记内,则只能剥离某些标记。

此外,正则表达式不善于解析HTML,但与选项相比速度较慢。但不管怎么说,这不是你在这里所做的。你正在浏览字符串并删除你不想要的东西。对于您的复杂需求,我认为您唯一的选择是使用正则表达式。

说实话,我认为你应该决定哪些标签是允许的,哪些不是。它们是否在其他标签内部根本不重要。它是标记,而不是脚本。

答案 2 :(得分:0)

第二个参数显示你可以使用一些标签:

string strip_tags ( string $str [, string $allowable_tags ] )

来自php.net

答案 3 :(得分:0)

我根据PHP的DOM类编写了自己的Filter类。看这里:XHTMLFilter class