Blog de Gonzalo

CADENAS DE CARACTERES MULTIBYTE

Normalmente cualquier idioma puede ser representado por una referencia uno a uno a un valor de 8 bits, pero también hay bastantes idiomas que requieren tantos caracteres que no pueden ser representados dentro del rango que un byte pueda codificar. Los esquemas de codificación multibyte se desarrollaron para poderusar más de 256 caracteres en el sistema de codificación regular a nivel de bits.
Para poder usar estas funciones multibye, que empiezan por mb_, hay que tener instalada la extensión mbstring.
mbstring proporciona funciones específicas para cadenas de texto multibyte que ayudan a tratar codificaciones multibyte en PHP. Además, mbstring controla la conversión de la codificación de caracteres entre los posibles esquemas de codificación. mbstring está diseñada para manejar codificaciones basadas en Unicode, como UTF-8. Cuando se manipulan cadenas de caracteres (trim, split, splice, etc.) en una codificación multibyte, es neceario utilizar funciones especiales, ya que dos o más bytes consecutivos pueden representar un único carácter en ese esquema de codificación. Si, de lo contrario, se usa una función que no considera caracteres multibyte con la cadena de caracteres, es probable que falle al detectar el comienzo o el final del carácter multibyte, produciendo resultados inesperados. A mí me ocurrió en un proyecto en el que usando las funciones de manipulación de cadenas normales obtenía resultados que no debía y el que era el CTO de la empresa me dijo que usara las funciones de manipulación de cadenas multibyte y obtuve los resultados esperados.
A continuación os pongo un listado de las funciones más normales. Si os fijais se añade el prefijo mb_ así que es bastante intuitivo en caso de las funciones más normales:

  • mb_strlen
  • mb_strpos
  • mb_substr
  • mb_send_mail (sobrecagar de mail). Esta es de las pocas que cambia casi todo el nombre.
  • mb_strlen
  • mb_detect_encoding
Hay muchas más he puesto unas pocas para que veais que no hay mucha diferencia solo con la función de enviar emails. Así que si al usar las funciones sin mb_ nos funciona bien y el texto se corrompe pensar que es por la codificación multibyte.