帮助在PHP中实现标签

时间:2011-08-22 14:02:18

标签: php tags xss

在我最近的PHP项目中,我需要实现以逗号分隔的标记(可搜索)(类似于此网站或类似WordPress中的内容)。检测和删除不必要的字符或标签的智能方法是什么?抛开XSS问题,首先,如果用户输入HTML(或其他标签)而不是纯文本,我需要清理和提取文本。

例如:

If user inputs <b>sdfasdf</b>, <a href="something">sdfsdfsdf</a>, <sdfsdfsdf
It should strip out all the unnecessary characters and tags and only plain text should be saved in database.

我在WordPress中尝试了它,并且非常聪明地发现这个加上自动提取文本。

我的问题:

是否有可用于此任务的开源库,我可以将其集成到我的项目中。我已经完成了一些关于此的功课,但 * htmlentities(),strip_tags(),HTML Purifier * 等似乎不适合这项任务。或者确实需要构建我自己的库?

有人可以指导我吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

除了删除<b>sdfasdf</b>, <a href="something">sdfsdfsdf</a>中的“完整”标记(标记语言元素)之外, 您还可以删除“禁止”字符,例如“&lt;”,“&gt;”和“&amp;” (使用preg_replace等),并将多个空格折叠到一个空格中(也使用preg_replace)。 请记住,它们仅用作标记(关键字),因此在这里使用有限的字符集是可以接受的。在堆栈中 例如,溢出只允许在标签中使用字母,数字和连字符。

答案 1 :(得分:0)

我会以相反的方式看待这一点。什么输入是合法的?标签名称中允许哪些字符?回答这些问题我将使用正则表达式构建服务器端的合法字符白名单,在UI中陈述规则,并简单地拒绝符合要求的输入。

将无效的inpu按摩到有效,很少是一个好主意。

标签中允许的字符通常是字母数字+短划线和下划线。有些网站也允许空间。