2010-01-30 114 views
1

我搜索了很多,因为过去这些问题已经有很多问题了。但我没有找到任何符合我需求的东西。PHP:从给定文本中过滤特定的html标签

我有一个格式的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> 

现在,我想的<book/><strong/>被剥离,但<strong>Hi!</strong>可以保持它的方式。

所以,我想定义一些我允许或不允许的规则,并且希望剩下的任何过滤器都可以做。

有没有简单的方法可以做到这一点?正则表达式不是我正在寻找,因为他们无法正确解析HTML。

问候,扬奥利弗

回答

1

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

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

我不认为有一种方式,如果他们没有其他的标签内,不使用正则表达式来仅剥离某些标签。

此外,正则表达式不是而不是擅长解析HTML,但与选项相比,速度较慢。但是,这不是你在这里做的,反正。你正在阅读字符串并删除你不想要的东西。而对于你的复杂需求,我认为你唯一的选择是使用正则表达式。

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

+0

正则表达式*很好*在*模式匹配*,但他们* *在*解析不好*。 – Gordon 2010-01-30 14:23:53

2

不要以为有这样的事情,我想即使HTML Purifier没有这样做。

我建议你使用类似Simple HTML Dom的东西来手动解析XHTML。

+0

这是我的第一个方法,但并不那么容易,因为我的输入不是有效的xml格式。 – janoliver 2010-01-30 12:05:24

0

第二个参数显示,您的CAL允许一些标签:

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

从php.net