Mbstring y PHP deben usarse en el desarrollo de aplicaciones web

4

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.

Fuente de grabación: instantshift.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More