0

我正在尝试建立一个基本上用于共享示例代码和评论的网站。我的问题是避免使用任何标签/脚本,除了 img 和一些非常常见的标签/脚本,例如 i b ...

首先通过拆分标签开始我的 代码,split_tag 其他地方和 htmlspecialchars 到代码部分,然后重新合并它们。但是,如果用户在文本部分的任何地方使用 <,它仍然会删除帖子,直到看到 >。(还尝试通过在 < 之后放置一个空格来避免删除 strip_tags,但无法找到一种方法来识别它是标签还是小于标签)

然后我向后尝试。对所有帖子使用 htmlspecialchars 并将特定的更改回标签外观。这次我遇到了所有替换功能的麻烦,因为其中一些功能无法正常工作或相互重叠。我觉得有一个简单的解决方案,但我看不到正确的角度。有什么建议么 ?

$yazi = htmlspecialchars($_POST["yazi"]);
$yazi = str_replace('&lt;a href=&quot;', '<a href"', $yazi);
$yazi = str_replace('&lt;&#47a&gt;', '</a>', $yazi);
$yazi = str_replace('&lt;code&gt;','<code>', $yazi);
$yazi = str_replace('&lt;&#47codea&gt;', '</code>', $yazi);
$yazi = str_replace('&lt;br&gt;', '<br>', $yazi);
$yazi = str_replace('&lt;i&gt;', '<i>', $yazi);
$yazi = str_replace('&lt;&#47i&gt;', '</i>', $yazi);
$yazi = str_replace('&lt;b&gt;','<b>',$yazi);
$yazi = str_replace('&lt;&#47b&gt;','</b>',$yazi);
$yazi = str_replace('&lt;p&gt;','<p>',$yazi);
$yazi = str_replace('&lt;&#47p&gt;','</p>',$yazi);
$yazi = str_replace('&lt;img src=&quot;', '<img src="', $yazi);
$yazi = str_replace('&quot;/&gt;', '"/>', $yazi);
$yazi = str_replace('&quot; /&gt;', '" />', $yazi);
$yazi = str_replace('&quot;&gt;', '">', $yazi);
$yazi = str_replace('&quot; &gt;', '" >', $yazi);

4

1 回答 1

0

听起来你想要一个 HTML sanitizer。

http://htmlpurifier.org/看起来不错。

于 2011-04-16T22:32:17.323 回答