-
Notifications
You must be signed in to change notification settings - Fork 0
10 codificacion de strings en php
Indice de contenido
- Introducción
- ¿Qué es UTF-8?
- Equivalencias de mbstring con funciones de strings
- Configuración de mbstring
Un bit es la unidad básica de almacenamiento de información, y un byte es una secuencia de ocho bits. El valor máximo que puede tomar un byte es 256.
Si partimos del idioma inglés, cada carácter (a, b, c...) está representado en el ordenador en un byte. El número total de caracteres en inglés no es mayor a 256, así que cada carácter puede ser representado usando diferentes secuencias de 8 bits. Por ejemplo en el código de caracteres ASCII, la letra D mayúscula tiene asignado el número binario 01000100, que escrito en número decimal es el 68. UTF-8 hereda la misma base de codificación y tiene los mismos bits asignados a los caracteres más básicos.
En un idioma diferente al inglés, como el chino mandarín, un sólo byte para representar un carácter se queda corto, y aquí es necesario que se empleen multibytes.
Las funciones básicas de strings como strcmp() o strlen() funcionan incorrectamente para idiomas con caracteres especiales, como el chino mandarín o el español. Es por ello que para trabajar con cadenas de caracteres multibyte, se necesitan funciones especiales, en PHP estas funciones son posibles con la extensión incorporada mbstring.
UTF significa Unicode Transformation Format y es un sistema de codificación cuyo objetivo es representar cada carácter de cada lenguaje en un conjunto de caracteres. Existen diferentes versiones de UTF, las más conocidas son:
| Formato de codificación | Descripción |
| UTF-8 | Sistema de codificación de 8 bits, compatible con ASCII, amplitud variable |
| UTF-16 | Sistema de codificación de 16 bits, amplitud variable |
| UTF-32 | Sistema de codificación de 32 bits, amplitud fija |
Cuando se trabaja con caracteres multibyte se suele trabajar con UTF-8, que además de ser compatible con ASCII, codifica caracteres en múltiples bytes con amplitud variable, es decir, que si puede emplear un byte para un carácter empleará un byte. El UTF-32 por ejemplo emplea 4 bytes para cualquier carácter.
Para funciones básicas de manipulación de strings, como strlen() o substr(), existen versiones compatibles con caracteres multibyte. Si no se usan estas versiones surgen resultados inesperados y errores de codificación.
Tabla de equivalencias de funciones de strings y mbstring:
| Monobyte | Multibyte | Descripción |
| strlen() | mb_strlen | Devuelve la longitud del string |
| strpos() | mb_strpos() | Encuentra la posición de la primera ocurrencia de un string en otro |
| substr() | mb_substr() | Devuelve parte de un string |
| strtolower() | mb_strtolower() | Devuelve un string en minúsculas |
| strtoupper() | mb_strtoupper() | Devuelve un string en mayúsculas |
| substr_count() | mb_substr_count() | Cuenta el número de ocurrencias de un substring |
| split() | mb_split() | Divide un string en un array mediante una expresión regular |
| mail() | mb_send_mail() | Envía un email |
Las funciones preg_* vienen con compatibilidad con UTF-8 por defecto.
Existen más funciones compatibles, las puedes ver en esta lista de funciones para strings multibyte.
Algunos ejemplos:
// strlen y mb_strlen
$cadena = "Ese camión es marrón";
echo strlen($cadena) . PHP_EOL; // Devuelve 22
echo mb_strlen($cadena). PHP_EOL; // Devuelve 20
// strpos y mb_strpos
$cadena = "Araña marrón";
echo strpos($cadena, "a", 3). PHP_EOL; // Devuelve 5
echo mb_strpos($cadena, "a", 3). PHP_EOL; // Devuelve 4
// strtolower y mb_strtolower
$cadena = "MAYÚSCULAS";
echo strtolower($cadena); // Devuelve: mayÚsculas
echo mb_strtolower($cadena); // Devuelve: mayúsculasEn cada una de las funciones mb_ es posible añadir un argumento para indicar el esquema de codificación que se quiere utilizar (como UTF-8). También es posible configurar globalmente el esquema que se quiere utilizar en todas las funciones multibyte desde el php.ini con mbstring.internal_encoding. Generalmente es mejor esta segunda opción.
Para poder utilizar las funciones mbstring tiene que existir la extensión en la instalación de PHP. Puede comprobarse mediante la función phpinfo() o mirando si está el archivo php_mbstring.dll en la carpeta de extensiones.
También tiene que estar activada en en archivo php.ini. Desde este mismo archivo se pueden personalizar algunas configuraciones importantes para nuestras aplicaciones:
| Nombre | Valor por defecto | Opciones de cambio* | Descripción |
| mbstring.language | neutral | PHP_INI_ALL | Ajuste de lenguaje nacional predeterminado NLS usado en mbstring. |
| mbstring.detect_order | NULL | PHP_INI_ALL | Define el orden de detección de códigos de caracteres predeterminado. Se puede establecer y obtener con mb_detect_order(). |
| mbstring.substitute_character | NULL | PHP_INI_ALL | Define el carácter de sustitución para caracteres inválidos. |
| mbstring.func_overload | "0" | PHP_INI_SYSTEM | Sustituye el comportamiento de las funciones de strings monobyte por sus homólogas multibyte. |
| mbstring.encoding_translation | "0" | PHP_INI_PERDIR | Activa el filtro transparente de codificación de caracteres para las peticiones HTTP, lo que hace que PHP detecte y convierta la codificación de entrada a la codificación del sistema. |
| mbstring.strict_detection | "0" | PHP_INI_ALL | Activa la detección de la codificación del script. |
| Anterior | Siguiente |
@intelguasoft - Full Stack Developer
| Versión: | 0.0.3-beta |
El curso está organizado según las temáticas indicadas en la página oficial de Rogue Wave Zend para la certificación de PHP.
Esta curso no tiene ninguna relación con Zend. |
|---|---|---|
| Fecha: | 28.11.2018 |
Básicos
Sintaxis básicaOperadores
Operadores bit a bit
Variables
Estructuras de control
Constantes y constructores base
Espacio de nombres
Extensiones
Configuraciones
Variables al descubierto
Recolector de basuras
Rendimiento (Performance)
Funciones
FuncionesArgumentos en funciones
Funciones variables
Valores por referencia en funciones
Funciones que devuelven algo
Ámbito de variables
Funciones anónimas y closure's
Cadenas y patrones
Las comillas y las cadenas de caracteresHeredoc y Nowdoc
Comparando cadenas de caracteres
Extracción en cadenas de caracteres
Análisis en cadenas de caracteres
Reemplazos en cadenas de caracteres
Formato de cadena de caracteres
Expresiones regulares (RegEx)
Codificación de caracteres
Codificación en cadenas de caracteres
Arreglos (Array's)
ArreglosArreglos asociativos
Iterar arreglos
Funciones de arreglos
SPL Arreglos mediante objetos
Conversión de arreglos
Archivos (I/O)
Manejo de archivosLectura de archivos
Escritura de archivos
Funciones del sistema de archivos
Socket's y archivos
Streams (?)
Seguridad
Concepto y funcionamiento CGIConfigurando la seguridad
Seguridad en Sesiones
Ataques XSS
Ataques CSRF
Ataques SQLInjection
Ataques CodeInjection
Ataques EmailInjection
Filtrado de datos de entrada
Escape de datos de salida
Encriptación y contraseñas
Seguridad en el almacenamiento de datos
Seguridad en la subida de datos
SSL y OpenSSL
Base de datos
Principios básicos SQLLos joins en SQL
Principales funciones SQL
Preparando sentencias SQL
Transacciones en SQL
Algo de PDO
Programación Orientada a Objetos
Instancias de clasesModificadores y herencia de clases
Interfaces
Excepciones
Auto-carga (Autoload)
Reflexión (Reflection)
Determinación de tipos (Type hinting)
Constantes de clase
Enlace estático de ejecución (Late Static Binding)
Métodos mágicos
Librería estándar PHP (SPL)
Generadores (Generators)
Traits
Clases abstractas
Formatos de información
Algo de XMLAlgo de SimpleXML
Algo de XML Parser
Algo de PHP DOM
Algo de Web Services
Web Services con SOAP
Algo de REST
Algo de JSON
Formato de fecha y hora
Características web's
SesionesFormularios
Métodos GET y POST
Cookies
Protocolo HTTP y sus headers
Autenticación HTTP
Códigos de estado HTTP