1

我创建了一个表单,我想使用 PHP 删除所有 HTML 标签,但排除一些标签(<b>, <strong>, <em>, <i>, <p>, <br>, <ul>, <li> <ol>......(以及一些用于格式段落的标签),当成员单击提交之前,它将被插入到数据库中。

$content = $_POST['content'];

谢谢大家的帮助。
如果我的英语不好,我很抱歉。

4

3 回答 3

12

这是你想要的?

$content=strip_tags($content,"<b><strong><em><i><p><br><ul><li><ol>");
于 2013-05-03T16:33:26.490 回答
3

以下应该做到这一点:

// 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;
于 2013-05-03T17:02:31.927 回答
2

使用strip_tags()可能很危险,因为它不会查看 HTML 属性。因此,恶意用户可以将其用于跨站点脚本 (XSS) 和其他攻击(正如我对 David Chen 的评论中所指出的那样)。

相反,我建议使用现有的 HTML 过滤器,例如http://htmlpurifier.org/,它可能更安全且适合此任务。

于 2013-05-03T16:51:00.773 回答