首页 文章

UTF-8转换数据[重复]

提问于
浏览
-3

这个问题在这里已有答案:

我使用ZF2和一个mysql数据库 . 问题是数据是latin1编码的,但目前我不必改变它 . 所以我使用了很多技巧来强制我的PDO驱动程序在UTF-8上获得我的结果:

这个在local.php中:

return array(
    'db' => array(
        'username' =>  $dbParams['username'],
        'dsn'      => 'mysql:dbname='.$dbParams['database'].';host='.$dbParams['hostname'].';charset=utf-8',
        'password' => '',
        'charset'  => 'utf-8',
    ),
);

而这一个在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'
    ),
);

但当我这样做时:

echo“ENCODING =” . mb_detect_encoding($ myDataBaseRetrievedVar);

这告诉我:ASCII!对于特殊字符,我不能做一个json_encode .

1 回答

  • 2

    首先,对于mysql,编码称为 utf8 ,而不是 utf-8 .

    其次,基本的latin1字符在utf-8中是相同的 . utf-8中的'Amelie'意思是与latin1中的'Amelie'相同的字符串以及ASCII . 意味着在ASCII中使用'Amelie',你也可以在utf-8中使用它 .

    第三,latin1支持有限数量的“特殊字符”,你不能指望从单字节编码支持与多字节编码相同的字符数 .

    一个元说明:如果您对特定功能有特殊问题,您必须询问有关此特定问题的问题,而不是其他问题 . 否则没有答案对你有好处 .

    如果你有json_encode()的问题,你必须提供你的问题:

    • 代码

    • 确切的错误消息

    • 数据样本

    只有在解决了这个问题之后,您才可以进行数据库交互,这可能是导致问题的原因 . 在编程中,根据猜测无法找到解决方案 .

相关问题