2010-02-20 15 views
5

Sto compilando un elemento Seleziona modulo e, se provo a utilizzare le entità HTML nel valore, viene convertito, anziché visualizzare il carattere speciale.Utilizzo di entità HTML in un modulo Zend Selezionare

Questo codice:

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

Renders:

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

Ma io voglio che sia:

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

Come si usa entità HTML qui?


Suggerimento?

ho scavato nel codice e che non si utilizza la funzione escape() dalla Zend Vista astratta sull'etichetta E il valore. Forse qualcuno sa come sovrascrivere/sovraccaricare questa funzione per uno specifico elemento del modulo? Non voglio sovrascrivere quel comportamento per impostazione predefinita.

funzione dal Zend_View_Helper_FormSelect classe

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

Questa è la funzione della classe 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

Che cosa volete che il vostro risultato atteso di essere? –

+0

@Anthony - Ho aggiornato la domanda per capire quale sia il mio output desiderato. – Sonny

risposta

10

Risulta che questo non è complicato come lo stavo facendo.

ho cambiato questo:

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

A tal:

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

Questo funziona anche per le etichette degli elementi del modulo! – Sonny

1

Si può cercare di spegnere/filtri Zend chiari per campi specifici quando li popolano.

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

Quando si cancellano i filtri Zend, è possibile applicare il proprio popolamento precedente.

+0

Ho provato proprio ora ma non ha funzionato. Sono abbastanza sicuro che 'clearFilters()' e i filtri in generale vengano applicati solo ai valori, non alle etichette. – Sonny