2010-02-20 21 views
5

estoy poblando Seleccionar un elemento de formulario, y si intento usar entidades HTML en el valor, se obtienen de convertidos, en lugar de mostrar el carácter especial.usar entidades HTML en una forma Zend Seleccionar

este código:

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

Renders:

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

Pero yo quiero que sea:

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

¿Cómo se utiliza entidades HTML aquí?


¿Pista?

cavé en el código y encontró que se trata de utilizar la función de escape() del Zend Ver resumen en la etiqueta Y el valor. Tal vez alguien sepa cómo anular/sobrecargar esta función para un elemento de formulario específico? No quiero anular ese comportamiento por defecto.

función de la clase 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; 
} 

Ésta es la función de la clase 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

¿Qué desea que su salida se espera que sea? –

+0

@Anthony - He actualizado la cuestión para hacer frente a lo que mi salida deseada es. – Sonny

Respuesta

10

resulta que esto no es tan complicado como lo estaba haciendo.

me cambió esto:

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

A esto:

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

¡Esto funciona también para etiquetas de elementos de formulario! – Sonny

1

Usted puede tratar de apagar/filtros Zend claras para los campos específicos en los que los pueblan.

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

Cuando borre los filtros Zend, puede aplicar los suyos, rellenando previamente.

+0

Lo intenté justo ahora, pero no funcionó. Estoy bastante seguro de que 'clearFilters()' y filtros en general solo se aplican a los valores, no a las etiquetas. – Sonny

Cuestiones relacionadas