禁用除 <a> 标签之外的所有标签

3
我想对所有标签进行编码(htmlentities)或禁用,除了<a>标签。
我该如何实现这个功能?

@Juhana,原帖需要编码所有HTML标签,除了允许的标签,而不是删除它们。 - xdazz
1个回答

4
使用HTML实体后,使用RegExp将链接转换回来:
preg_replace('/&lt;(\/?a(?:|\s[\S\s]+?))&gt;/i', '<$1>', $string);

如果您想要移除其他标签,请使用:

strip_tags($string, '<a>');

1
你应该在a后面添加\s。现在根据我的理解,它将允许标签:audio、abbr、acronim等。 - RiaD
感谢@RiaD指出,我已经为这种情况将a.*?替换为a(?:|\s[\S\s]+?)。更新还包括匹配换行符,因为<a \nhref="">也是有效的HTML锚标记。 - Rob W

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接