HtmlEntities和Zend TextArea

时间:2012-09-21 23:20:45

标签: php zend-framework zend-form

我对ZF很新。

我一直在Zend Framework上建立一个网站。 一切都很好看。

但我无法弄清楚如何解决1个问题,这在开发文章管理模块时实际上是必不可少的。

我的表格有ZEND_TextArea,如下所示:

    $full_text = new Zend_Form_Element_TextArea('full_text');
    $full_text->setLabel('Description:')
            ->setOptions(array('rows' => '28','cols' => '40'))
            ->setRequired(true)
            ->addValidator('NotEmpty', true)
            ->addFilter('HTMLEntities')            
            ->addFilter('StringTrim');

它运行良好,它具有过滤HTMLEntities,对于过滤TextArea非常重要。

在网站上显示保存的数据时,我正在使用html_entity_decode($item['full_text']),这很好。

但是当我尝试编辑它时,它会将编码后的文本加载到我的textarea中,编辑完成后会对我已经编码的文本进行编码 - 而在首页上我会遇到如下可怕的事情:

    p;quot;color: #ff0000;">asdasda</
span>sdas <strong>sdfsdf&
lt;/strong>&

也许有人可以帮我弄清楚如何处理这个问题,特别是将解码后的数据加载到TextArea的编辑形式,这样我的字符串就不会被编码两次,而且编辑它时会以人的方式显示而不是编码之一。

如果你能提供代码示例 - 真的很棒!!

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您在创建表单中使用HtmlEntities过滤器,请不要在编辑表单中使用它。

创建表单:

$elements[] = $this->createElement('text','name',array(
    'label'      => 'test',
    'filters'    => array('HtmlEntities'),
));

编辑表格:

$elements[] = $this->createElement('text','name',array(
    'label'      => 'test',
    'value'      => html_entity_decode($value)
));

你做html_entity_decode()来设置值,向用户显示正确的“名字”..

在模型中更新数据时,再次使用htmlEntities过滤器:

$data['name'] = $HtmlEntities->filter($data['name']);