5 de desembre del 2012

PHP Warning: json_encode(): Invalid UTF-8 sequence in argument [SOLUCIONAT]

Si mai us trobeu que en accedir des de PHP a una base de dades MySQL i codificar el resultat en JSON per retornar-lo us surt un error tipus "PHP Warning:  json_encode(): Invalid UTF-8 sequence in argument", està clar que teniu un problema. Possiblement algunes de les dades que esteu retornant estan buides, són invàlides o contenen caràcters estranys. Per sort, la solució és senzilla.

En primer lloc, comproveu que la base de dades utilitza codificació UTF-8 (p.e. amb phpMyAdmin):


Llavors, en accedir a la base de dades des de PHP afegiu l'opció "SET NAMES utf8" a l'atribut MYSQL_ATTR_INIT_COMMAND. Per exemple, utilitzant PDO podria ser similar a:
$DBH = new PDO("mysql:host=$server;dbname=$dbname",
            $user, $pass, 
            array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
I ja veureu com l'error desapareix dels vostres logs, i les dades s'obtenen correctament.

Cap comentari:

Publica un comentari a l'entrada