2010-02-20 8 views
5

Zapełniam element Wybierz formularz, a jeśli spróbuję użyć elementów HTML w wartości, zostanie on przekonwertowany, zamiast wyświetlać znak specjalny.Używanie encji HTML w formularzu Zend Wybierz

ten kod:

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

Renders:

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

Ale chcę go mieć:

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

Jak używać jednostek HTML tutaj?


Wskazówka?

I wykopali w kodzie i stwierdził, że jest za pomocą funkcji escape() z Zend View streszczenie na etykiecie I wartość. Może ktoś wie jak nadpisać/przeciążyć tę funkcję dla konkretnego elementu formularza? Nie chcę domyślnie przesłonić tego zachowania.

funkcji z klasy

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; 
} 

Ten Zend_View_Helper_FormSelect jest funkcja z klasy 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

Czego chcesz, aby moc się spodziewać? –

+0

@Anthony - Zaktualizowałem pytanie, aby podać, jaki jest pożądany wynik. – Sonny

Odpowiedz

10

Okazuje się, że nie jest to tak skomplikowane, jak robiłem to.

zmieniłem to:

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

do tego:

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

Okazuje się, że działa to również w przypadku etykiet elementów formularza! – Sonny

1

Można spróbować wyłączyć/Clear filtry Zend dla konkretnych dziedzinach, kiedy je wypełnić.

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

Po wyczyszczeniu filtrów Zend można zastosować własne, wcześniejsze wypełnienie.

+0

Próbowałem już teraz, ale to nie zadziałało. Jestem dość pewny, że 'clearFilters()' i filtry w ogóle są stosowane tylko do wartości, a nie do etykiet. – Sonny