我搜索了很多,因为过去曾经问过很多这样的问题。但我找不到符合我需要的东西。
我有来自表单的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
答案 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