2010-02-20 23 views
5

我正在填充選擇表單元素,如果我嘗試在值中使用HTML實體,它將被轉換,而不是顯示特殊字符。在Zend窗體中使用HTML實體選擇

此代碼:

$form->field_name->addMultiOption('value', ' • label'); 

呈現:

<option value="one">&amp;nbsp;&amp;bull; label</option> 

但我希望它是:

<option value="one">&nbsp;&bull; label</option> 

如何使用HTML實體這裏?


提示?

我挖的代碼,發現它使用標籤值上從Zend查看摘要escape()功能。也許有人知道如何覆蓋/重載此功能的特定表單元素?我不想在默認情況下覆蓋該行爲。從Zend_View_Helper_FormSelect

protected function _build($value, $label, $selected, $disable) 
{ 
    if (is_bool($disable)) { 
     $disable = array(); 
    } 

    $opt = '<option' 
     . ' value="' . $this->view->escape($value) . '"' 
     . ' label="' . $this->view->escape($label) . '"'; 

    // selected? 
    if (in_array((string) $value, $selected)) { 
     $opt .= ' selected="selected"'; 
    } 

    // disabled? 
    if (in_array($value, $disable)) { 
     $opt .= ' disabled="disabled"'; 
    } 

    $opt .= '>' . $this->view->escape($label) . "</option>"; 

    return $opt; 
} 

功能是從Zend_View_Abstract類的功能:

private $_escape = 'htmlspecialchars'; 

/* SNIP */ 

public function escape($var) 
{ 
    if (in_array($this->_escape, array('htmlspecialchars', 'htmlentities'))) { 
     return call_user_func($this->_escape, $var, ENT_COMPAT, $this->_encoding); 
    } 

    return call_user_func($this->_escape, $var); 
} 
+0

你想幹什麼你的預期輸出是什麼? – 2010-02-20 18:18:23

+0

@Anthony - 我已經更新了這個問題來解決我想要的輸出是什麼。 – Sonny 2010-02-20 20:24:54

回答

10

原來這並不像我當時那麼複雜。

我改變了這個:

$form->field_name->addMultiOption('value', '&nbsp;&bull; label'); 

要這樣:

$form->field_name->addMultiOption('value', 
    html_entity_decode('&nbsp;&bull;', ENT_COMPAT, 'UTF-8') . ' label'); 
+0

原來這也適用於表單元素標籤! – Sonny 2010-12-20 16:49:55

1

你可以試試,當你填充它們關掉/清除Zend的過濾器的特定字段。

$form->getElement('yourElementName')->clearFilters(); 
// pupulate the element 

當您清除Zend過濾器時,您可以應用您自己的先前填充。

+0

我剛剛嘗試過,但沒有奏效。我相當肯定,通常只有'clearFilters()'和過濾器只應用於這些值,而不是標籤。 – Sonny 2010-02-22 22:48:03