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">&nbsp;&bull; label</option>
Run Code Online (Sandbox Code Playgroud)
但我希望它是:
<option value="one"> • 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', ' • label');
Run Code Online (Sandbox Code Playgroud)
对此:
$form->field_name->addMultiOption('value',
html_entity_decode(' •', ENT_COMPAT, 'UTF-8') . ' label');
Run Code Online (Sandbox Code Playgroud)