我目前正在评论系统中使用Zend_Filter_StripTags,但是当输入'< 3'时,东西会中断。 StripTags似乎不够聪明,没有意识到它不是HTML标记,并且将过滤器创建为“new Zend_Filter_StripTags(array('3'))”似乎也不起作用。
我应该首先通过正则表达式传递输入,还是有办法让Zend_Filter_StripTags直线调整并向右飞行?
答案 0 :(得分:5)
结束编写Zend_Filter类,它基本上是HTMLPurifier的包装器。效果很好,因为HTMLPurifier比striptags更聪明。
答案 1 :(得分:1)
我对Zend不太熟悉,但如果您想要允许<3
之类的内容,请在其上执行htmlspecialchars
而不是strip_tags
。
答案 2 :(得分:1)
你最想要的是Zend_Filter_HtmlEntites。
答案 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的包装器。