我创建了一个表单,我想使用 PHP 删除所有 HTML 标签,但排除一些标签(<b>, <strong>, <em>, <i>, <p>, <br>, <ul>, <li> <ol>
......(以及一些用于格式段落的标签),当成员单击提交之前,它将被插入到数据库中。
$content = $_POST['content'];
谢谢大家的帮助。
如果我的英语不好,我很抱歉。
这是你想要的?
$content=strip_tags($content,"<b><strong><em><i><p><br><ul><li><ol>");
以下应该做到这一点:
// tags separated by vertical bar
$strip_tags = "a|strong|em";
// target html
$html = '<em><a><b>ha<a href="" title="">d</a>f</em></b>';
// Regex is loose and works for closing/opening tags across multiple lines and
// is case-insensitive
// note: The *? makes the matching non-greedy
$clean_html = preg_replace("#<\s*\/?(".$strip_tags.")\s*[^>]*?>#im", '', $html);
// prints "<b>hadf</b>";
echo $html;
使用strip_tags()
可能很危险,因为它不会查看 HTML 属性。因此,恶意用户可以将其用于跨站点脚本 (XSS) 和其他攻击(正如我对 David Chen 的评论中所指出的那样)。
相反,我建议使用现有的 HTML 过滤器,例如http://htmlpurifier.org/,它可能更安全且适合此任务。