Utilizo la biblioteca PDO con base de datos MySQL en PHP, pero si inserto cualquier dato codificado en UTF-8, como palabras en árabe, se inserta en la base de datos pero como ?????????
.PDO + MySQL y codificación UTF-8 rota
En mi propio marco, después de crear la conexión PDO, envío dos consultas: SET NAMES utf8
y SET CHARACTER SET utf8
. Todavía no funciona.
Ejemplo:
loadclass('PDO', array(
sprintf(
'mysql:host=%s;port=%s;dbname=%s',
confitem('database', 'host'),
confitem('database', 'port'),
confitem('database', 'name')
),
confitem('database', 'username'),
confitem('database', 'password'),
array('PDO::ATTR_PERSISTENT' => confitem('database', 'pconnect'))
));
$this->query('SET NAMES ' . confitem('database', 'charset'));
$this->query('SET CHARACTER SET ' . confitem('database', 'charset'));
Solución: Use la función json_encode
para convertir los datos antes de insertarlo en la base de datos, y utilizar json_decode
para decodificar después de ir a buscar. Así es como lo hago ahora.
¿Estás seguro de que esto no es un problema de PHP? Asegúrese de tener mbstring instalado? – Rahly
Sugiero que envíe de vuelta la misma cadena y compruebe si llega bien. Solo como una prueba. – s3v3n
¿qué es el valor de confitem ('database', 'charset')? –