2011-08-22 67 views
2

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

例如:

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净化器*等似乎不适合此任务。或者需要建立自己的图书馆与此结合?

有人可以指导我吗?

谢谢!

+0

为什么'strip_tag'看起来不适合这项任务? – SLaks

+0

,因为它似乎'strip_tag'不能删除不完整或破碎的标签 – Laraveldeep

+1

如果WordPress似乎做你想找的东西,我会建议看看他们如何处理它,并重现类似的方法。 – adlawson

回答

0

除了去除“完整”标记(标记语言元素),如发现<b>sdfasdf</b>, <a href="something">sdfsdfsdf</a>, 你也可以去掉“禁”字,如“<”,“>”和“&”(使用preg_replace和类似),并将多个空间合并为一个空间(也使用preg_replace)。请记住,它们只用作标签(关键字),所以在这里可以使用有限制的字符集。在堆栈中 溢出,例如,标签中只允许使用字母,数字和连字符。

0

我会看着这个相反的方向。什么投入是合法的?标签名称中允许使用哪些字符?那些问题的答案我会用正则表达式构建一个合法字符的服务器端白名单,在用户界面中陈述规则,并简单地拒绝符合要求的输入。

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

标记中允许的字符通常是字母数字+破折号和下划线。有些网站还允许空格。

+0

我的后端是utf8-unicode整理和国际语言是允许的。我不确定它是否可以用正则表达式过滤掉。感谢您的建议 – Laraveldeep