Verwenden von HTML -Entitäten in einem Zend -Formular auswählen
-
21-09-2019 - |
Frage
Ich bevölkern ein ausgewähltes Formularelement, und wenn ich versuche, HTML -Entitäten im Wert zu verwenden, wird es konvertiert, anstatt das spezielle Zeichen anzuzeigen.
Dieser Code:
$form->field_name->addMultiOption('value', ' • label');
Rendern:
<option value="one">&nbsp;&bull; label</option>
Aber ich möchte, dass es lautet:
<option value="one"> • label</option>
Wie benutze ich HTML -Entitäten hier?
Hinweis?
Ich habe den Code eingegraben und stellte fest, dass er das verwendet escape()
Funktion aus der Zend View -Zusammenfassung auf der Etikett UND der Wert. Vielleicht weiß jemand, wie man diese Funktion für ein bestimmtes Formularelement überschreibt/überlastet? Ich möchte dieses Verhalten standardmäßig nicht außer Kraft setzen.
Funktion von der Zend_View_Helper_FormSelect
Klasse
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;
}
Dies ist die Funktion aus der Zend_View_Abstract
Klasse:
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);
}
Lösung
Es stellt sich heraus, dass dies nicht so kompliziert ist, wie ich es geschafft habe.
Ich habe das geändert:
$form->field_name->addMultiOption('value', ' • label');
Dazu:
$form->field_name->addMultiOption('value',
html_entity_decode(' •', ENT_COMPAT, 'UTF-8') . ' label');
Andere Tipps
Sie können versuchen, Zend -Filter für bestimmte Felder auszuschalten/zu löschen, wenn Sie sie bevölkern.
$form->getElement('yourElementName')->clearFilters();
// pupulate the element
Wenn Sie die Zend -Filter löschen, können Sie Ihre eigene Vorberufung anwenden.