Corregir caracteres dañados en formularios PHP con UTF-8 y mbstring
Fecha de publicación:
Actualizado:
Artículos técnicos > Corregir caracteres dañados en formularios PHP con UTF-8 y mbstring
Estado 2026 y uso seguro
Conclusión: Mantenga una codificación explícita (normalmente UTF-8) en el formulario HTML, la respuesta HTTP, el código fuente PHP, el manejo de cadenas y la conexión a la base de datos. Capture la entrada sin procesar e identifique el límite donde los bytes se decodifican incorrectamente antes de cambiar la configuración global.
Qué aprenderás
- Cómo distinguir un problema de visualización de una conversión de entrada o una corrupción de la base de datos.
- Qué encabezados y configuraciones de PHP son relevantes para las aplicaciones UTF-8 modernas.
- Por qué las recetas heredadas
mbstring.internal_encodingymbstring.http_inputque aparecen a continuación no deben copiarse en una implementación actual.
Para quién: mantenedores de PHP que solucionan problemas de mojibake después de la validación de formularios, redireccionamientos o viajes de ida y vuelta a la base de datos.
Situación en 2026: PHP desaprobó las antiguas directivas de codificación iconv/mbstring en PHP 5.6 en favor de default_charset; El código moderno debería hacer que la codificación sea explícita en cada límite. La configuración original se conserva únicamente para explicar el incidente histórico.
Nota de seguridad: Los comandos y ejemplos de configuración del artículo original no se han vuelto a ejecutar en un entorno de producción actual. Verifique las versiones compatibles, las copias de seguridad, los controles de acceso y los pasos de reversión en un entorno de prueba independiente antes de aplicarlos.
Fuentes primarias oficiales
Resumen.
Se producía un texto ilegible al pasar de la pantalla de entrada a la de confirmación en PHP.
El texto se confunde al introducirlo en el formulario y pasar a la pantalla de confirmación.
También se produce un texto ilegible al pasar a la propia pantalla debido a errores de comprobación de entrada.
Como el servidor acababa de ser construido, sentí que algo faltaba en la configuración de PHP, así que describiré lo que descubrí en ese momento.
Índice de contenidos
1. investigación (para determinar la causa de algo)
Para investigar la causa del problema se investigó la siguiente información.
1-1. encuesta
En primer lugar, compruebe la configuración de PHP (php.ini).
default_charset = "UTF-8"
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On
Es como se describe arriba y parece estar bien.
Entonces el problema parece ser causado por la fuente PHP.
Sin embargo, la fuente de PHP no identificó el problema probable.
Una vez más, revisé el php.ini en busca de configuraciones sospechosas y encontré una configuración sospechosa.
mbstring.http_input = auto
No estaba claro si se codificaba en UTF-8 porque estaba configurado como automático, así que se cambió de la siguiente manera para probarlo.
mbstring.http_input = UTF-8
Se ha resuelto con éxito el texto ilegible.
Esta configuración es necesaria para el módulo mbstring cuando se utilizan cadenas multibyte como el japonés en PHP.
Configuración de la codificación de las peticiones http recibidas.
2. resumen
Si se produce un texto confuso, intente primero organizar el flujo de procesamiento.
Y si experimenta caracteres confusos cuando utiliza PHP para la transición de la pantalla de entrada a la pantalla de confirmación u otras transiciones de pantalla, sospeche de los siguientes ajustes en php.ini.
La configuración por defecto es 'auto', así que compruébalo cuando uses mbstring para procesar cadenas multibyte.