2009-07-24 12 views
7

Sto usando PHP 5.2.6 e il set di caratteri della mia app è UTF-8.cambia il set di caratteri predefinito di funzioni PHP come "htmlspecialchars"

Ora, come dovrei cambiare il set di caratteri predefinito di PHP? NON quello che specifica il tempo mimo e il set di caratteri dell'output.

Ma che cambierà per tutta la funzione PHP htmlspecialchars simili, htmlentities, ecc

so, c'è un parametro in quelle funzioni che prende il set di caratteri della stringa di input. Ma non voglio specificare per tutte le funzioni che uso. E se da qualche parte dimentico, sarà un casino.

so anche che posso avvolgere quelle funzioni e creare il mio involucro simile:

function myHtmlize($str) 
{ 
    return htmlspecialchars($str, ENT_COMPAT, 'UTF-8'); 
} 

anche io, non mi piace questa soluzione.

Voglio davvero dire a PHP, che per impostazione predefinita prendere 'UTF-8' come set di caratteri. Non "iso-8859-1".

È possibile?

+2

Non penso sia possibile ma questa è una buona domanda. +1 – MitMaro

risposta

2

Come questo? http://us2.php.net/manual/en/function.setlocale.php

* LC_ALL for all of the below 
* LC_COLLATE for string comparison, see strcoll() 
* LC_CTYPE for character classification and conversion, for example strtoupper() 
* LC_MONETARY for localeconv() 
* LC_NUMERIC for decimal separator (See also localeconv()) 
* LC_TIME for date and time formatting with strftime() 
* LC_MESSAGES for system responses (available if PHP was compiled with libintl) 
+1

Non ho capito esattamente cosa devo fare .. – Sabya

+0

Hai controllato questo? http://us2.php.net/manual/en/function.setlocale.php –

2
Ci

è un C-funzione di determine_charset (char * charset_hint ...) che viene utilizzato per trovare il "giusto" charset sulla base di

in questo ordine e seconda se alcune estensioni sono built-in o no.
Il "problema" è, quando si chiama htmlentities ('xyz') questo determine_charset() si chiama con charset_hint = NULL e la prima di questa funzione fa è:

/* Guarantee default behaviour for backwards compatibility */ 
if (charset_hint == NULL) 
    return cs_8859_1; 

Dovete chiamare almeno htmlentities ('xyz', ENT_QUOTES, '')

+1

Questo è esattamente ciò di cui voglio liberarmi. – Sabya

+0

Non vedo come, a meno che non modifichi il codice sorgente di php (molto probabilmente per la funzione htmlentities) – VolkerK

1

io non sono del tutto sicuro, ma io penso mbstring.func_overload opere con htmlentities.

htmlspecialchars è indipendente dal set di caratteri btw. (Almeno finché il charset supporta il sottoinsieme ascii, che utf-8 fa).

+1

Questo non è del tutto corretto, qualsiasi cosa al di fuori della gamma ascii/win-1252 verrà eseguita da htmlentities se non si specifica set di caratteri. – donatJ

Problemi correlati