2012-09-21 43 views
1

我是ZF的新手。HtmlEntities和Zend TextArea

我一直在建立一個關於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'); 

它工作的偉大,它有過濾器ヶ輛是用於過濾文本區域確實是必不可少的。

在網站上顯示保存的數據時,我使用的是html_entity_decode($item['full_text']),這很好。

但只要我嘗試編輯它,它加載編碼的文本到我的textarea,編輯它編碼我已編碼的文本之後 - 和在頭版我得到這樣可怕的事情:

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

也許有人可以幫我弄清楚如何處理這個問題,特別是將解碼後的數據加載到TextArea的Edit窗體中,這樣我的字符串就不會被編碼兩次了,而編輯它時卻是以人爲的方式顯示,而不是編碼的。

如果您可以提供代碼示例 - 將真的很棒!

謝謝!!

+0

如果您在顯示數據前對數據進行解碼,爲什麼麻煩編碼呢? –

+0

我正在爲用戶在網站上解碼它,我想在編輯'cuz編碼數據時解碼它,這些數據在表單處理後再一次被編碼。編碼的數據也不可能編輯。 – mrGott

+1

請勿在textarea元素中應用HtmlEntities過濾器。在插入數據庫之前,在您的模型中應用HtmlEntities。這個過濾器將HtmlEntities應用於任何時間(甚至是另一個實體)在texarea中的任何東西。 – RockyFord

回答

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']);