2012-02-19 5 views
27

Nel "Cookbook PHP", si dice (p.589) che per impostare correttamente la codifica del char dei dati in uscita su utf-8 è necessario modificare la configurazione di default_encoding in utf-8.Impostazione della codifica PHP predefinita su utf-8?

Tuttavia, non riesco a trovare questa configurazione in php.ini. Dovrei semplicemente aggiungere una linea che direbbe default_encoding = "utf-8"?

Ho un ;default_charset = "iso-8859-1". Come puoi vedere (;), al momento non è attivato. Devo rimuovere il punto e virgola e impostarlo su "utf-8"? Si prende cura della codifica predefinita?

ho trovato anche altre direttive che codificano che non so cosa fare:

[iconv] 
;iconv.input_encoding = ISO-8859-1 
;iconv.internal_encoding = ISO-8859-1 
;iconv.output_encoding = ISO-8859-1 
... 
; http://php.net/exif.encode-unicode 
;exif.encode_unicode = ISO-8859-15 
... 
;mssql.charset = "ISO-8859-1" 
... 
;exif.encode_unicode = ISO-8859-15 

C'è qualche motivo per cui non dovrei semplicemente sostituirli tutti con utf-8?

risposta

38

Si dovrebbe impostare il default_charset a UTF-8:

default_charset = "utf-8" 

(PHP Cookbook può avere un errore di battitura in esso se ti chiedono di cambiare la default_encoding - Non ho mai sentito di esso.)

Inoltre, è necessario assicurarsi che il server Web sia impostato per l'uscita UTF-8 se si stanno visualizzando i caratteri codificati UTF-8. In Apache questo può essere impostato nel file httpd.conf:

AddDefaultCharset UTF-8 

Per quanto riguarda la modifica delle impostazioni di codifica iconv, exif, e mssql, probabilmente non è necessario impostare questi (le impostazioni sono questi commentata comunque) ma è una buona idea cambiarli tutti in UTF-8 comunque.

+0

Per Apache, non ho un file 'http.conf'. Io uso WAMPserver e spediscono Apache con un file 'httpd.conf'. Suppongo che siano la stessa cosa? Inoltre, è una linea che aggiungi manualmente? Non c'è niente riguardo charset nel mio file 'httpd.conf'. – JDelage

+1

che in realtà era un errore di battitura da parte mia (corretto). Se non vedi un riferimento a 'AddDefaultCharset' nel file di configurazione, puoi controllare i file inclusi nella configurazione (sarà qualcosa come' Include conf/extra/[something] ') per vedere se è impostato in nessuno di quelli. In caso contrario, aggiungilo al file httpd.conf principale. –

+0

Esiste una sorta di spiegazione che spiega cosa fanno tutte quelle funzioni di codifica? – CMCDragonkai

6

modificare la riga

;default_charset = "iso-8859-1" 

leggere

default_charset = "utf-8" 

Circa le altre opzioni, non li toccare. Evitare le impostazioni predefinite, sempre impostare in modo esplicito la codifica di in tutto quello che fai

  • connessioni al database,
  • la lettura e la scrittura di file,
  • conversione con iconv.

Inoltre, fare attenzione alla codifica in cui vengono salvati i file PHP, assicurarsi che siano in UTF-8, soprattutto se contengono stringhe da visualizzare o confrontare.

-2

passaggio da * default_charset = "utf-8" * a * default_charset = "iso-8859-1" * funziona per me (io uso web server Apache e Linux). per alcuni motivi quando uso utf-8, alcuni caratteri non vengono visualizzati correttamente. Cambiano in qualche segno quadrato o punto interrogativo a seconda del browser web utilizzato.

+3

Se si memorizzano i file .php come ISO-8859-1 e il set di caratteri predefinito di PHP è impostato su UTF-8, si verificheranno dei problemi. Tuttavia, la soluzione corretta qui non è quella di impostare PHP su ISO-8859-1 ma per assicurarsi che il tuo editor memorizzi i tuoi file .php come UTF-8. ISO-8859-1 è una scarsa corrispondenza per il * World Wide * Web. – RavuAlHemio

3

Ho avuto un problema sulla mia query mysql che non avrebbe riconosciuto un po 'di acentuazione latina, quindi la query non avrebbe funzionato.Ho pensato che potesse essere il file php e così via, fino a quando ho scoperto che usando pdo per chiamare il mysql dovevo aggiungere il charset. La cosa strana è che il server precedente che ho usato ha funzionato bene!

+0

@Marcos quando hai modificato la risposta vedo che il grassetto è stato perso e tradotto in "**" ... L'asnwer non dovrebbe essere quel testo che vedi. Dal momento che è il segno di spunta in grassetto. – Miguel

+0

Risolto, @miguel, mi dispiace –

0

Per risolvere ho cambiato "UTF-8" in "UTF-8" (senza trattino), risolvendo invece il problema.

CentOS

Izaias Moura

0

A livello .htaccess (file .htaccess) della direttiva php dovrebbe essere php_value default_charset UTF-8