2012-02-19 22 views
27

En el "Libro de cocina PHP", dicen (p.589) que para establecer correctamente la codificación de caracteres de los datos salientes en utf-8 es necesario editar la configuración default_encoding en utf-8.¿Configurando la codificación predeterminada de PHP a utf-8?

Sin embargo, no puedo encontrar esta configuración en php.ini. ¿Debo simplemente agregar una línea que diga default_encoding = "utf-8"?

Tengo un ;default_charset = "iso-8859-1". Como puede ver (;), en este momento no está activado. ¿Debo eliminar el punto y coma y configurarlo en "utf-8"? ¿Eso se ocupa de la codificación predeterminada?

También encontré que codifican otras directivas que no sé qué hacer al respecto:

[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 

¿Hay alguna razón por la que no debería simplemente reemplazar todo con utf-8?

Respuesta

38

Se debe ajustar su default_charset a UTF-8:

default_charset = "utf-8" 

(PHP libro de cocina pueden tener un error tipográfico en que si le piden que cambiar el default_encoding - Nunca he oído hablar de él.)

También querrá asegurarse de que su servidor web esté configurado para dar salida a UTF-8 si va a generar caracteres codificados en UTF-8. En Apache esto puede ser establecido por en el archivo httpd.conf:

AddDefaultCharset UTF-8 

En cuanto a la modificación de las iconv, exif y mssql configuración de codificación, es probable que no necesita configurar estos (la configuración de éstos han comentado de todos modos) pero es una buena idea cambiarlos a UTF-8 de todos modos.

+0

Para Apache, no tengo un archivo 'http.conf'. Yo uso WAMPserver y envían Apache con un archivo 'httpd.conf'. ¿Supongo que son lo mismo? Además, ¿es una línea que agregas manualmente? No hay nada sobre el juego de caracteres en mi archivo 'httpd.conf'. – JDelage

+1

que en realidad fue un error tipográfico por mi parte (corregido). Si no ve una referencia a 'AddDefaultCharset' en el archivo de configuración, es posible que desee consultar los archivos incluidos en la configuración (algo como' Include conf/extra/[something] ') para ver si está configurado en cualquiera de esos. Si no, solo agrégalo al archivo httpd.conf principal. –

+0

¿Hay algún tipo de explicación que explique qué hacen todas esas funciones de codificación? – CMCDragonkai

6

modificar la línea

;default_charset = "iso-8859-1" 

leer

default_charset = "utf-8" 

Sobre las otras opciones, no las toque. Evitar la configuración por defecto, siempre establecer explícitamente la codificación de todo lo que haces

  • conexiones de bases de datos,
  • lectura y escritura de archivos,
  • conversión con iconv.

Además, tenga cuidado con la codificación en la que se guardan sus archivos PHP, asegúrese de que estén en UTF-8, especialmente si contienen cadenas para mostrar o comparar.

-2

cambiar de * default_charset = "UTF-8" * * a default_charset = "iso-8859-1" * funciona para mí (yo uso el servidor web Apache y el sistema operativo Linux). por alguna razón, cuando uso utf-8, algunos caracteres no se procesan bien. Cambian a algún signo cuadrado o signo de interrogación dependiendo del navegador web utilizado.

+3

Si almacena sus archivos .php como ISO-8859-1 y el juego de caracteres predeterminado de PHP está configurado a UTF-8, se encontrará con problemas. Sin embargo, la solución correcta aquí no es configurar PHP a ISO-8859-1, sino asegurarse de que su editor almacene sus archivos .php como UTF-8. ISO-8859-1 es una combinación pobre para la * World Wide * Web. – RavuAlHemio

3

Tuve un problema con mi consulta de MySQL que no reconocía alguna acentuación latina, por lo que la consulta fallaba.Pensé que podría ser el archivo php, y así sucesivamente, hasta que descubrí que al usar pdo para llamar al mysql tuve que agregar el juego de caracteres. ¡Lo extraño es que el servidor anterior que usé funcionaba bien!

$dsn = 'mysql:host=localhost;dbname=retirodo_main;charset=utf8'; 
- - - - - - - - - - - - - - - - - - - - - - - - - ^^^^^^^^^^^^ 
+0

@Marcos cuando editó la respuesta, veo que el negrita se perdió y se tradujo a "**" ... El asnwer no debería ser ese texto que ve. Dado que esa es la marca en negrita. – Miguel

+0

Reparado, @miguel, lo siento –

0

Para resolver he cambiado "UTF-8" a "UTF-8" (sin el guión), la solución del problema en su lugar.

CentOS

Izaias Moura

0

A nivel .htaccess (archivo .htaccess) la directiva de PHP debe ser php_value default_charset UTF-8

Cuestiones relacionadas