2011-05-22 13 views
8

Me preguntaba qué significa la siguiente frase en términos simples para nosotros los maniquíes?PHP iconv_strlen() que significa la pregunta

¿Y qué es la secuencia de bytes? ¿Y cuántos caracteres en un byte?

iconv_strlen() counts the occurrences of characters in the given byte sequence str on the basis of the specified character set, the result of which is not necessarily identical to the length of the string in byte.

+1

cuenta los caracteres, no los bytes. donde en cuanto a ascii, el byte y el recuento de caracteres serían idénticos. Pero lea el artículo a continuación, vale la pena. –

Respuesta

12

Tomemos por ejemplo el carácter japonés 'こ'. Suponiendo la codificación UTF-8, este es un carácter de 3 bytes (0xE3 0x81 0x93). Vamos a ver lo que sucede cuando usamos strlen lugar:

$ php -r 'echo strlen("こ") . "\n";' 
3 

El resultado es 3, ya que está contando strlen bytes. Sin embargo, este es solo un carácter único de acuerdo con la codificación UTF-8. Ahí es donde entra iconv_strlen. Sabe que en UTF-8, este es un carácter único, a pesar de que está compuesto por 3 bytes. Entonces, si probamos esto en su lugar:

$ php -r 'echo iconv_strlen("こ", "UTF-8") . "\n";' 
1 

Tenemos 1. Eso es lo que la explicación debe señalar.

1

Una cadena tiene una longitud determinada en bytes. El número de caracteres en esa cadena será igual al número de bytes si y solo si cada carácter en la cadena está representado por un solo byte. Esto es cierto, por ejemplo, para las letras en inglés. Para representaciones (es decir, codificaciones) que usan más de un byte para representar algunos o todos los caracteres, el número de caracteres será menor que el número de bytes *. No es posible, por ejemplo, representar todos los caracteres chinos posibles con un byte.

Por lo tanto, iconv_strlen, dada una codificación, intentará contar el número de caracteres en la cadena. La secuencia de bytes es el orden de los bytes en la cadena. Para una cadena que contenga chino, usando la codificación UTF8, podría, por ejemplo, tener una cadena de 20 bytes que tenga 14 caracteres.

* Podría ser más, si un personaje está representado por menos de un byte.

0

iconv_strlen() recuento de las ocurrencias de los personajes en la secuencia de bytes determinado str sobre la base del conjunto de caracteres especificado, el resultado de que no es necesariamente idéntica a la longitud de la cadena en bytes.

Traducciones:

  • byte sequence: otra palabra para cadena, que es una secuencia de bytes (1 byte = 8 bits), por ejemplo .: 01011010 00011001 01101011. secuencias de bytes representan personajes como A, B, etc. C
  • character set: alias de codificación , especifica cómo un byte mapas a un personaje; p.ej. 01000001 representa A en the ASCII character set.
  • not necessarily identical to the length […] in byte: en el conjunto de caracteres ASCII, un byte representa exactamente un carácter. Este no es el caso para todos los juegos de caracteres; en dos, tres o más bytes se utilizan para representar un personaje.Esto se debe a que un byte solo puede contener 256 valores diferentes y algunos idiomas se escriben con más de 256 caracteres (como chino y japonés). Unicode incluso intenta mapear todos los caracteres de todos los idiomas humanos en un conjunto de caracteres único, que requiere mucho más de un byte por carácter.

En resumen:

iconv_strlen() cuenta los caracteres en la cadena dada, teniendo en cuenta el conjunto de caracteres. Por lo tanto, la cantidad de caracteres puede no ser igual a la cantidad de bytes.