2011-04-16 37 views
0

我想基本建立一个网站共享示例代码和评论。我的问题是避免任何标签/脚本,除了一个img和一些非常常见的像我b ...我尝试了不同的解决方案,但在一个点上所有的堆叠:如果用户使用<不适用于标签,意味着不到...php条带与例外或重组htmlspecialchar

首先开始我的代码与拆分标记,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);

+2

您是否想过转义所有HTML,然后允许用户使用不同的标记语言(如markdown或bbcode)添加格式和图像?这样代码示例可以与注释分开处理。我基本上在思考如何工作的方式。 – 2011-04-16 21:19:55

+0

在这种情况下,请使用降价。一旦你习惯了降价的简单性,BBCode是可怕的。顺便说一句,至少在这里降低这个SO允许一些HTML – ThiefMaster 2011-04-16 22:31:54

+0

感谢您的答案。我坚持我的方式并解决了它:我多次使用爆炸来找出特殊的标签并用 ...等替换它们 – muraty 2011-04-17 21:47:30

回答