I use ZF2 and a mysql database. The problem is the data are latin1 encoded, but for the moment I don't have to change that. So I use a lot of tricks to force my PDO driver to have my results on UTF-8 :
This one in local.php :
return array(
'db' => array(
'username' => $dbParams['username'],
'dsn' => 'mysql:dbname='.$dbParams['database'].';host='.$dbParams['hostname'].';charset=utf-8',
'password' => '',
'charset' => 'utf-8',
),
);
And this one in global.php
return array(
'db' => array(
'charset' => 'utf-8',
'driver' => 'Pdo',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8",
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET UTF8",
),
),
'service_manager' => array(
'factories' => array(
'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
)
),
'translator' => array(
'locale' => 'fr_FR'
),
);
But when I do :
echo "ENCODING=".mb_detect_encoding($myDataBaseRetrievedVar);
This tells me : ASCII ! And for special characters I can't do a json_encode.