Я заполняю Избранный элемент формы, и если я пытаюсь использовать Объекты HTML в значении, это добирается, преобразовал, вместо того, чтобы отобразить специальный символ.
Этот код:
$form->field_name->addMultiOption('value', ' • label');
Рендеринг:
<option value="one">&nbsp;&bull; label</option>
Но я хочу, чтобы это было:
<option value="one"> • label</option>
Как я использую объекты HTML здесь?
Подсказка?
Я закопал код и нашел, что он использует escape()
функция из Краткого обзора Представления Зенда на маркировать AND значение. Возможно, кто-то знает, как переопределить/перегрузить эту функцию для определенного элемента формы? Я не хочу переопределять то поведение по умолчанию.
Функция от 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);
}
Оказывается, это не так сложно, как я это делал.
Я изменил это:
$form->field_name->addMultiOption('value', ' • label');
На это:
$form->field_name->addMultiOption('value',
html_entity_decode(' •', ENT_COMPAT, 'UTF-8') . ' label');
Вы можете попробовать отключить/очистить фильтры Zend для определенных полей при их заполнении.
$form->getElement('yourElementName')->clearFilters();
// pupulate the element
Когда вы очистите фильтры Zend, вы сможете применить свои собственные фильтры перед заполнением.