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.
 
    