La guía paso a paso o código que verás en este post es la resolución más sencilla y válida que encontramos a esta duda o problema.
Solución:
المراكز
es Mojibake, o posiblemente “doble codificación”, para المراكز — Por favor, SELECT col, hex(col) ...
para ver cuál de estos se parece a:
Mojibake: D8A7D984D985D8B1D8A7D983D8B2
codificación doble: C398C2A7C399E2809EC399E280A6C398C2B1C398C2A7C399C692C398C2B2
Si Mojibake:
- Los bytes que se almacenarán deben estar codificados en UTF-8. Arregla esto.
- La conexión al INSERTAR y SELECCIONAR texto debe especificar utf8 o utf8mb4. Arregla esto.
- La columna debe declararse CHARACTER SET utf8 (o utf8mb4). Arregla esto.
- HTML debe comenzar con
.
Si hay codificación doble: esto se debe a la conversión de latin1 (o lo que sea) a utf8, luego se tratan esos bytes como si fueran latin1 y se repite la conversión.
Más discusión:
Problemas con los caracteres UTF-8; lo que veo no es lo que almacené
Hacer no utilizar el mysql_*
interfaz en PHP; cambiar a mysqli_*
o interfaces PDO. mysql_*
fue eliminado en PHP 5.7.
Si su base de datos es latin1, almacenará caracteres Unicode como caracteres de varios bytes. Si está basado en utf-8, aún almacenará varios caracteres pero se mostrará de una manera más “sensata”.
Si su carácter ر se representa como XYZ (3 bytes), cuando recupere XYZ, el navegador los volverá a ensamblar en una ر visible.
Sin embargo, si su base de datos es utf-8, codificará aún más cada componente, de modo que al final vea XYZ de manera “confiable”. Digamos que X se denota como x1,x2, e Y es simplemente y, y Z es z1,z2,z3, entonces en lugar de ver Ú, que se almacena como XYZ, ahora ve x1x2yz1z2z3, que se muestra como XYZ.
Intente convertir su base de datos a latin1 para al menos confirmar mi teoría. Gracias.
Editar:
No es necesario utilizar una biblioteca utf8 js. Asegúrese de que la codificación de caracteres de su página sea utf8:
Cuando publica los datos, puede codificarlos con encodeURIComponent antes de enviarlos con una solicitud XHR. No estoy seguro de si el sabor jQuery de $.ajax ya hace la codificación.