Zend框架过滤器输入StripTags和“< 3”

时间:2009-02-13 01:24:31

标签: zend-framework filtering

我目前正在评论系统中使用Zend_Filter_StripTags,但是当输入'< 3'时,东西会中断。 StripTags似乎不够聪明,没有意识到它不是HTML标记,并且将过滤器创建为“new Zend_Filter_StripTags(array('3'))”似乎也不起作用。

我应该首先通过正则表达式传递输入,还是有办法让Zend_Filter_StripTags直线调整并向右飞行?

4 个答案:

答案 0 :(得分:5)

结束编写Zend_Filter类,它基本上是HTMLPurifier的包装器。效果很好,因为HTMLPurifier比striptags更聪明。

答案 1 :(得分:1)

我对Zend不太熟悉,但如果您想要允许<3之类的内容,请在其上执行htmlspecialchars而不是strip_tags

答案 2 :(得分:1)

你最想要的是Zend_Filter_HtmlEntites。

请参阅:Zend_Filter_HtmlEnties

答案 3 :(得分:1)

htmlspecialchars和Zend_Filter_HtmlEntities的问题在于,如果你试图去除所有的html标签(比如'a'和'img'等),那么你最终会在你的输出中找到那个标记而不是剥离它们。

以博客评论为例。如果你使用htmlspecialchars或Zend_Filter_HtmlEntities,在评论中有人试图使用html输入一个链接,你最终会在显示评论时显示该标记。但是如果你使用strip_tags或Zend_Filter_StripTags你最终会破坏评论,因为它们都不够聪明,意识到'&lt; 3'不是标签,只是从'&lt; 3'到评论结束之间的所有内容(或直到找到'&gt;')。

如果Zend有像HTMLPurifier这样的东西,它会在剥离标签之前实际检查和验证输入,这将是很好的。这意味着像'&lt; 3'这样的东西会被单独留下,像'Awesome Site'这样的东西会变成'Awesome Site'。

这是一个我正在努力解决的问题,目前我似乎最终会编写自己的Zend_Filter类,它基本上是HTMLPurifier的包装器。