Zend_Filter_StripTags忽略允许的标记和属性

时间:2010-03-28 06:31:40

标签: php zend-framework zend-filter-strip-tags

我正在尝试使用以下代码,它仍然会删除所有标记。难道我做错了什么?我正在使用最新的V1.10

$allowed_tags = array('img', 'object', 'param', 'embed', 'a', 'href', 'p', 'br', 'em', 'strong', 'li', 'ol', 'span');
$allowed_attributes = array('style', 'src', 'alt', 'href', 'width', 'height', 'value', 'name', 'type', 'embed', 'quality', 'pluginspage');
Zend_Loader::loadClass('Zend_Filter_StripTags');
$html_filter = new Zend_Filter_StripTags($allowed_tags, $allowed_attributes);

$post = $html_filter->filter($this->_request->getPost('post'));

对于测试用例,我一直在使用相同的字符串,这就是

中的内容
<p><span style="background-color: #333399; color: #ff9900; text-decoration: underline;"><em><strong>This is a test</strong></em></span></p>

<p><span style="background-color: #333399; color: #ff9900;"><strong><em><sub><span style="background-color: #ffffff;"><span style="color: #000000;">asdf</span></span></sub></em></strong></span></p>

<p><span style="background-color: #333399; color: #ff9900;"><strong><em><span style="background-color: #ffffff;"><span style="color: #000000;"><sup>asdf</sup></span></span></em></strong></span></p>

<p><span style="background-color: #333399; color: #ff9900;"><strong><em><span style="background-color: #ffffff;"><span style="color: #000000;"><img title="Cool" src="../../../public/scripts/tinymce/plugins/emotions/img/smiley-cool.gif" border="0" alt="Cool" />asdf</span></span></em></strong></span></p>

<ul>

<li><span style="background-color: #333399; color: #ff9900;"><strong><em><span style="background-color: #ffffff;"><span style="color: #000000;">sadf</span></span></em></strong></span></li>

</ul>

<ol>

<li><span style="background-color: #333399; color: #ff9900;"><strong><em><span style="background-color: #ffffff;"><span style="color: #000000;">asdf</span></span></em></strong></span></li>

</ol>

这就是出来的

这是一个测试

ASDF

ASDF

ASDF

SADF

ASDF


或者,也许还有其他错误,因为我刚试过这个:

$post = strip_tags($this->_request->getPost('elm1'), '<img><object><param><embed><a><href><p><br><em><strong><li><ol><span>');

它也剥夺了一切。也许PHP中有一个我缺少的设置?

1 个答案:

答案 0 :(得分:2)

根据API Doc for the StripTag Filter,构造函数签名是

void   __construct  ([string|array|Zend_Config $options = null]) 

所以应该使用它(更新):

$html_filter = new Zend_Filter_StripTags(array(
  'allowTags' => $allowed_tags, 
  'allowAttribs' => $allowed_attributes
));

在早期版本的Zend Framework(1.8.4)中,您必须执行

$html_filter = new Zend_Filter_StripTags($allowed_tags, $allowed_attributes);

所有版本都应支持:

$html_filter = new Zend_Filter_StripTags;
$html_filter->setAttributesAllowed($allowed_attributes);
$html_filter->setTagsAllowed($allowed_tags);

Internally, StripTags works with str_replace and preg_replace。因此,即使有人将strip_tags()添加到php.ini中的不允许函数列表中,过滤器也应该有效。

我已尝试使用您的示例代码,但它确实有用。