在Zend表单中使用HTML实体选择

Son*_*nny 5 php zend-framework zend-form html-entities

我正在填充Select表单元素,如果我尝试在值中使用HTML实体,它将被转换,而不是显示特殊字符.

这段代码:

$form->field_name->addMultiOption('value', ' • label');
Run Code Online (Sandbox Code Playgroud)

呈现:

<option value="one">&amp;nbsp;&amp;bull; label</option>
Run Code Online (Sandbox Code Playgroud)

但我希望它是:

<option value="one">&nbsp;&bull; label</option>
Run Code Online (Sandbox Code Playgroud)

我如何在这里使用HTML实体?


暗示?

我在代码中挖了一下,发现它正在使用escape()标签上的Zend View Abstract中的函数值.也许有人知道如何为特定的表单元素覆盖/重载此函数?我不想默认覆盖该行为.

来自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;
}
Run Code Online (Sandbox Code Playgroud)

这是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);
}
Run Code Online (Sandbox Code Playgroud)

Son*_*nny 10

事实证明,这并不像我做的那么复杂.

我改变了这个:

$form->field_name->addMultiOption('value', '&nbsp;&bull; label');
Run Code Online (Sandbox Code Playgroud)

对此:

$form->field_name->addMultiOption('value',
    html_entity_decode('&nbsp;&bull;', ENT_COMPAT, 'UTF-8') . ' label');
Run Code Online (Sandbox Code Playgroud)