¿Qué significa la falta de soporte de Unicode en PHP?

7

¿Cómo puede la falta de compatibilidad con Unicode en PHP afectar a una aplicación web de PHP?

    
pregunta Emanuil Rusev 19.02.2011 - 08:55

4 respuestas

13

Cualquier sitio web que pretende ser multilingüe o tratar con documentos o contenido que no se puede representar en Latin-1 probablemente sea problemático si no tiene soporte de Unicode.

  • Por ejemplo, http://amazon.jp sería un brindis sin Unicode.

Otro caso de uso problemático es cuando el contenido puede contener símbolos matemáticos y otros.

Sin embargo, su ejemplo de Facebook sugiere que, de hecho, de hecho puede "hacer" Unicode en PHP. Alternativamente, http://facebook.jp no se implementa en PHP. De cualquier manera, la página de inicio dice:

<meta http-equiv="Content-type" content="text/html; charset=utf-8" />

y tiene un montón de contenido UTF-8.

Bien, esto es lo que dice el documento PHP para "Cadena":

  

"Una cadena es una serie de caracteres, por lo tanto, un carácter es lo mismo que un byte. Es decir, hay exactamente 256 caracteres diferentes posibles. Esto también implica que PHP no tiene soporte nativo de Unicode. Ver utf8_encode () y utf8_decode () para algunas funciones básicas de Unicode . "

Así que PHP sí tiene soporte Unicode. Es solo que las "cadenas nativas" no están basadas en Unicode.

Entonces, lo que significa es que si necesita lidiar con cualquier idioma (o conjunto de idiomas) que no se puede codificar en un conjunto de caracteres de 8 bits, su código PHP será más engorroso en cualquier punto donde lo necesite. para procesar contenido como caracteres (reales).

    
respondido por el Stephen C 19.02.2011 - 09:01
6

Hay (al menos) tres enfoques diferentes para el texto en el mundo de la programación moderna.

  1. trata el texto como una secuencia de bytes. Existe una convención generalizada de que los valores de byte 0-127 representan ascii, pero la media de los valores de byte 128-255 depende del contexto. Pueden ser caracteres en un conjunto de caracteres heredados de un solo byte, unidades de código de un conjunto de caracteres heredados multibyte o unidades de código de UTF-8.

  2. trata el texto como una secuencia de puntos de código Unicode.

  3. trata el texto como una secuencia de unidades de código UTF-16.

En general, un lenguaje y / o las bibliotecas, las API y los protocolos utilizados con él fomentan o incluso obligan a un enfoque determinado.

php toma el primer acercamiento. Una cadena es solo una secuencia de bytes, no hay un tipo especial para Unicode. Algunos lo caracterizarían como "no compatible con Unicode", pero yo lo consideraría una caracterización errónea.

Lo que sí significa es que si está utilizando php con utf-8, es su responsabilidad hacerlo correctamente. UTF-8 es una codificación de muy buen comportamiento, por lo que no tiene que preocuparse tanto como lo hizo con algunas codificaciones multibyte heredadas, pero aún debe tener cuidado con algunas operaciones. Especialmente el truncamiento (no desea cortar en medio de una secuencia multibyte) y el conteo de caracteres (es un recuento de unidades de código utf-8 aceptables para la aplicación dada o si necesita contar puntos de código o incluso otra cosa). Si no te responsabilizas por estas cosas, es probable que tus usuarios vean fallas.

Por otro lado, coincide bien con el funcionamiento de los protocolos de Internet. Un sistema que funciona con cadenas como secuencias de bytes puede tratar con datos de Internet sin codificar conversiones. Un sistema que funciona en secuencias de puntos de código o unidades de código utf-16 generalmente debe realizar conversiones de texto que van hacia / desde Internet.

    
respondido por el Peter Green 10.10.2015 - 02:31
3

En realidad, php tiene métodos para manipular cadenas de múltiples bytes. Consulte mbstring . También hay una opción de configuración en php.ini para usar los reemplazos de mbstring para la mayoría (todas) de las funciones de manipulación de cadenas. Para más detalles, consulte mbstring overload .

    
respondido por el DoPPler 22.02.2011 - 18:48
2

Significa que tienes que tomar algunos atajos y hacer trucos desagradables para obtener Unicode. Y que esos trucos harán que el código sea más engorroso y menos legible.

    
respondido por el Coyote21 22.02.2011 - 16:22

Lea otras preguntas en las etiquetas