Mbstring y PHP deben usarse en el desarrollo de aplicaciones web
Bytes y Bits son dos unidades para almacenar información lógica. Un bit se puede pensar como un agujero, que se puede llenar con uno de dos valores: 0 o 1.
Un byte es una agrupación de ocho bits. En términos matemáticos, un byte es capaz de representar 256 valores diferentes (28).
Pensemos en un idioma, digamos inglés. Tiene unos caracteres (a, b, c,… etc.) que se representan en un ordenador por bytes. El número total de caracteres en inglés no supera los 256, por lo que cada carácter se puede representar utilizando una secuencia diferente de 8 bits.
Las cadenas son simplemente una colección de caracteres. Normalmente, en PHP, las operaciones de cadenas operan en cadenas de caracteres de un solo byte. Por ejemplo: es posible que desee comparar las cadenas "Hola" y "Hola". Con strcmpr(), las dos cadenas se compararán suponiendo que cada carácter de la cadena ocupa un byte.
Pero piense en un idioma que tiene más de 256 caracteres (por ejemplo, el japonés), o cuando queremos representar caracteres de varios idiomas al mismo tiempo. El almacenamiento de un byte para cada carácter no es suficiente. Aquí es donde entra en juego el concepto de varios bytes.
Una cadena de texto en japonés puede hacer que la función strcmpr() devuelva un valor incorrecto o basura, ya que la suposición de que un byte representa un carácter ya no es cierta. Cuando trabajamos con cadenas codificadas en varios bytes, la manipulación de estas cadenas necesita funciones especiales en lugar de las funciones comunes de cadena de un solo byte. Para manejar cadenas de varios bytes en PHP, mbstring proporciona las funciones de cadenas específicas de varios bytes.
Entendiendo UTF-8
UTF significa formato de transformación Unicode y es un sistema de codificación que tiene como objetivo representar cada carácter en cada idioma en un conjunto de caracteres. Existen diferentes versiones de UTF, algunas de las cuales se muestran a continuación:
Formato de codificación | Descripción |
UTF-1 | Compatible con ISO-2022, obsoleto del estándar Unicode. |
UTF-7 | Sistema de codificación de 7 bits, se utilizó principalmente en el correo electrónico, pero no formaba parte del estándar Unicode. |
UTF-8 | Sistema de codificación de 8 bits, ancho variable y compatible con ASCII. |
UTF-EBCDIC | Sistema de codificación de 8 bits, ancho variable y compatible con EBCDIC. |
UTF-16 | Sistema de codificación de 16 bits, ancho variable. |
UTF-32 | Sistema de codificación de 32 bits, ancho fijo. |
Nos encontramos usando UTF-8 la mayor parte del tiempo cuando trabajamos con texto multibyte, así que concentrémonos en eso por un momento. UTF-8 codifica caracteres en múltiples bytes usando el siguiente esquema:
Entonces, ¿cómo sabe si un carácter está almacenado en un byte o en varios bytes? Para ello, mira el bit de orden superior del primer byte.
Código | Sentido |
0xxxxxxx | Un código de un solo byte |
110xxxxx | Un byte más sigue a este byte |
1110xxxx | Dos bytes más siguen a este byte |
11110xxx | Tres bytes más siguen a este byte |
111110xx | Cuatro bytes más siguen a este byte |
1111110x | Cinco bytes más siguen a este byte |
10xxxxxx | Continuación del carácter de varios bytes |
Cada byte continuo en una secuencia de múltiples bytes comienza con 1 y 0 en sus dos bits de mayor orden para proporcionar una forma de detectar datos corruptos.
Equivalentes multibyte de funciones de cadena comunes
Para las funciones de cadena de uso común, como strlen(), strops() y substr(), existen funciones equivalentes de varios bytes. Debe usar las funciones equivalentes cuando trabaje con cadenas de varios bytes.
Tabla 4: Funciones de cadena de múltiples bytes equivalentes de un solo byte
byte único | Multibyte | Descripción |
strlen() | mb_strlen() | Obtener longitud de cadena |
strpos() | mb_strpos() | Encuentra la posición de la primera aparición de una cadena en una cadena |
substr() | mb_substr() | Devolver parte de una cadena |
strtolower() | mb_strtolower() | Hacer una cadena en minúsculas |
strtosuperior() | mb_strtosuperior() | Hacer una cadena en mayúsculas |
substr_count() | mb_substr_count() | Cuente el número de ocurrencias de subcadenas |
separar() | mb_split() | Dividir cadena en matriz por expresión regular |
correo() | mb_send_mail() | Enviar correo codificado |
ergio() | mb_ereg() | Coincidencia de expresiones regulares |
hacer() | mb_reg() | Coincidencia de expresión regular insensible a mayúsculas y minúsculas |
Permítanme dar un ejemplo del uso de la función multibyte:
-
Nombre de la función: int mb_strlen (cadena $cadena [, cadena $codificación])
-
Descripción: Obtiene la longitud de la cadena.
-
Parámetros: str (cadena de entrada cuya longitud debe determinarse)
codificación (codificación de caracteres)
-
Valor devuelto: Número de carácter de la cadena de entrada str con codificación de codificación de caracteres
-
Tipo de retorno: int
Código de ejemplo: aquí hay un código de ejemplo de cómo usar la función mb_strlen. Aquí la cadena de entrada es una palabra china y se utilizan tres opciones de codificación de caracteres diferentes.
$ str ="大大";
echo mb_strlen ($ str, 'utf8' ).
echo mb_strlen ($ str, 'gbk' ).
echo mb_strlen ($ str, ' gb2312').
Restricciones: UTF-8 tiene algunas restricciones, como-
- En teoría, la longitud máxima de los caracteres codificados en UTF-8 es de seis bytes.
- 0xFE y 0xFF nunca se usan en esta codificación.
Habilite mbstring desde php.ini :
- Confirme la existencia de php_mbstring.dll en la carpeta ext.
- Descomente ;extension=php_mbstring.dll de php.ini (es decir, extension=php_mbstring.dll)
- Reiniciar servidor.
Configuración de tiempo de ejecución: para habilitar algunas funciones de mbstring, se deben cambiar algunas configuraciones más.
Tabla 5: Configuraciones en php.ini
Nombre | Valor por defecto | Opción cambiable |
mbstring.idioma | neutral | PHP_INI_SISTEMA | PHP_INI_PERDIR |
mbstring.detect_order | NULO | PHP_INI_ALL |
mbstring.http_input | aprobar | PHP_INI_ALL |
mbstring.http_salida | aprobar | PHP_INI_ALL |
mbstring.codificación_interna | NULO | PHP_INI_ALL |
mbstring.script_encoding | NULO | PHP_INI_ALL |
mbstring.sustituir_carácter | NULO | PHP_INI_ALL |
mbstring.func_overload | 0 | PHP_INI_SISTEMA | PHP_INI_PERDIR |
mbstring.encoding_translation | 0 | PHP_INI_SISTEMA | PHP_INI_PERDIR |
Explicación de las opciones de configuración:
La “Opción modificable" determina el valor del modo modificable. Describe cómo y desde dónde se pueden cambiar las opciones de mbstring. Aquí va el significado de los valores de modo:
Tabla 6: Modo de cambio diferente
Modo | Sentido |
PHP_INI_SISTEMA | Podemos configurar la entrada usando php.ini o httpd.conf |
PHP_INI_PERDIR | Podemos configurar la entrada usando php.ini, .htaccess, httpd.conf o .user.ini |
PHP_INI_ALL | Podemos configurar la entrada desde cualquier lugar |
PHP_INI_USUARIO | Podemos configurar la entrada usando el script de usuario. |
Cómo cambiar de script de usuario:
Podemos usar el siguiente código para establecer la codificación interna de mbstring desde la secuencia de comandos del usuario:
<?php
ini_set('mbstring.internal_encoding', 'UTF-8');
?>
Cómo cambiar desde php.ini:
Podemos editar el archivo php.ini para configurar algunas opciones de mbstring.
; Set default language
mbstring.language = Neutral; Set default language to Neutral(UTF-8) (default)
mbstring.language = English; Set default language to English
; Enabled HTTP input encoding translation.
mbstring.encoding_translation = On
; Set default HTTP input character encoding
mbstring.http_input = pass ; No conversion.
mbstring.http_input = auto ; Set HTTP input to auto
Algunos problemas relacionados con mbstring:
El uso de funciones de mbstring a veces puede causarle algún tipo de acoso. Discutiré aquí algunos problemas del uso de la función de sobrecarga multibyte. Pensemos un escenario.
Ha habilitado la opción mbstring.func_overload en su archivo php.ini. Tu trabajo va bien. Está sobrecargando la función de cadena de un solo byte con funciones de cadena de varios bytes. Pero, ¿qué sucederá si necesita una biblioteca externa que use con frecuencia alguna función de cadena?
Hay una solución de este problema. Puede usar mbstring.internal_coding. Cuando llame a alguna biblioteca externa, utilizará la codificación de un solo byte y, cuando vuelva a su proyecto, se implementará la codificación de varios bytes. Pero, ¿qué sucede si hay una devolución de llamada entre su proyecto y la biblioteca externa? Aquí falla.
Por lo tanto, debe tener en cuenta estos problemas al usar las opciones de mbstring.
Importancia de mbstring para el desarrollo web:
Para desarrollar cualquier aplicación web internacional, el uso de mbstring es imprescindible. De lo contrario, su aplicación se limitará a algunas naciones e idiomas determinados. Como desarrollador, le sugiero que obtenga algunos conocimientos sobre este dominio y sea eficiente como programador web.