Pregunta

¿Cómo puedo saber qué codificación utilizará PHP al enviar datos al navegador? Es decir. con el encabezado Cotent-Type, por ejemplo: iso-8859-1.

¿Fue útil?

Solución

Por lo general, los servidores Apache + PHP de servidores web están configurados para enviar NO charset encabezado . Estas son las formas más cortas de probar cómo está configurado su servidor:

  • Use esta herramienta para ver el encabezado del servidor al obtener cualquiera de sus páginas en su sitio web . Si en los encabezados del servidor ve un <?php echo ini_get('default_charset'); ?> significa que su servidor lo está usando, generalmente no contendrá un AddDefaultCharset some_charset.
  • Otra forma es ejecutar este script simple en su servidor: <=> Como se dijo anteriormente, esto generalmente imprime una cadena vacía, si es diferente, le mostrará el <=> de PHP.

La segunda solución supone que Apache no está configurado con <=> lo cual no suele ser el caso, pero en ese caso me temo que la configuración de Apache podría anular la directiva ini PHP deafult_charset.

Otros consejos

Puede usar la solución de encabezado () que sugirió William, sin embargo, si está ejecutando Apache, y la configuración de Apache está usando un juego de caracteres predeterminado, eso ganará cada vez (Internet Explorer se volverá loco) Vea: AddDefaultCharset

Tenga en cuenta que los tipos de contenido y las codificaciones son dos cosas diferentes. text / html es un tipo de contenido; ISO-8859-1 y UTF-8 son codificaciones.

El encabezado de respuesta HTTP que envía el servidor generalmente se ve así:

Content-Type: text/html; charset=utf-8

" juego de caracteres " es en realidad la codificación de caracteres. No está en un encabezado separado; sin embargo, hay un encabezado llamado " Content-Encoding " que en realidad especifica qué tipo de compresión usa la respuesta (por ejemplo, gzip).

Si desea cambiar la codificación de caracteres a UTF-8, en un archivo que contiene HTML:

<?
header("Content-Type: text/html; charset=utf-8");

Puede configurar el suyo con header('Content-type: xxx/yyy');, pero creo que el texto / html se envía por defecto.

AFAIK, PHP envía cadenas de bytes. es decir, si sus variables contienen UTF-8, enviará UTF-8. si tiene iso-8859-1, también lo enviará. si los mezclas, no será bonito.

Si su servidor no está configurado para tener un contenido predeterminado o un juego de caracteres, y tampoco PHP es, PHP enviará solo Content-Type: text/html - no especificará ningún juego de caracteres, y enviará los bytes tal como los ve en el guión.

Si un navegador recibe una página sin el juego de caracteres especificado, pueden suceder varias cosas:

  • la mayoría de los navegadores tienen " Encoding / Charset " menú; Si el usuario selecciona explícitamente uno, el navegador intentará aplicarlo. No sucede con demasiada frecuencia, así que:
  • algunos navegadores intentan representarlo con un conjunto de caracteres predeterminado (que depende de la configuración regional, por ejemplo, para FF y cs_CZ solía ser iso-8859-2; YMMV)
  • IE intentará determinar el conjunto de caracteres de forma heurística (tomará una conjetura, en función de la distribución de caracteres, y muchas veces lo hace bien; a veces se equivoca y obtienes una página en rumano interpretada como texto en chino, que generalmente significa " ilegible ")
  • algunos navegadores antiguos recurrirán a us-ascii

Si con este procedimiento, el juego de caracteres del script PHP y el juego de caracteres del navegador coinciden, el texto será, accidentalmente, legible. Si no, habrá signos extraños y fenómenos similares.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top