2012-11-04 14 views
6

Sto utilizzando htmlentities($data, ENT_QUOTES) su qualsiasi dato recuperato dal database prima di visualizzarlo.Come impostare ENT_QUOTES per impostazione predefinita per la funzione htmlentities() in php

C'è un modo per impostare il flag ENT_QUOTES per impostazione predefinita per htmlentities() funzione, in modo che, anche se scrivo htmlentities($data) che dovrebbe funzionare come htmlentities($data, ENT_QUOTES).

Come scritto nella documentazione di php il valore predefinito è ENT_COMPAT | ENT_HTML401.

Per vostra informazione sto usando il framework codeigniter, php5.

AGGIORNAMENTO 1: il wrapping con una funzione personalizzata come suggerito da Michael potrebbe essere d'aiuto, ma l'ho già utilizzato ovunque nel sito Web senza flag ENT_QUOTES e mi chiedevo se esiste un modo fornito da php per modificare i valori predefiniti per le sue funzioni.

UPDATE 2: Penso che la funzione incorporata html_escape() fornita da codeigniter (suggerita da Wesley) sia la migliore per me in modo che non debba scrivere la mia funzione wrapper.

+0

Perché si utilizza 'htmlentities', non' htmlspecialchars'? – zerkms

+3

Si potrebbe semplicemente avvolgere la funzione. 'function my_htmlentities ($ string) {return htmlentities ($ string, ENT_QUOTES);}' e chiama 'my_htmlentities()'. –

+0

@zerkms Forse lo si usa comunemente negli attributi HTML, dove 'htmlentities()' gestisce la codifica delle virgolette in un modo più diretto. –

risposta

3

Non c'è modo di cambiare i flag predefiniti che io conosca, ma il consiglio che ti è stato dato nei commenti è assolutamente il modo migliore per avvicinarti a questo: usa una funzione wrapper.

comoda, Codeigniter ha uno costruito nel già, nome appropriato:

echo html_escape($string); 

È possibile passare in array così, ecco quello che fa:

/** 
* Returns HTML escaped variable 
* 
* @access public 
* @param mixed 
* @return mixed 
*/ 
if (! function_exists('html_escape')) 
{ 
    function html_escape($var) 
    { 
     if (is_array($var)) 
     { 
      return array_map('html_escape', $var); 
     } 
     else 
     { 
      return htmlspecialchars($var, ENT_QUOTES, config_item('charset')); 
     } 
    } 
} 

Basta fare una ricerca per htmlentities in il tuo progetto e sostituire (attentamente) con html_escape. Ciò fornirà anche l'opportunità di apportare facilmente modifiche in futuro, poiché è possibile modificare la funzione. È un po 'un investimento iniziale ma ne vale la pena.

+0

Immagino che questo sia quello che stavo cercando .. Grazie :) –

+0

Il fatto che possa pulire anche gli array ha reso la mia vita molto più facile .. Devo solo passare l'array di dati completo in una volta sola nel controller prima inviandolo alla vista. –

Problemi correlati