这个问题在这里已有答案:
我使用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 回答
首先,对于mysql,编码称为
utf8
,而不是utf-8
.其次,基本的latin1字符在utf-8中是相同的 . utf-8中的'Amelie'意思是与latin1中的'Amelie'相同的字符串以及ASCII . 意味着在ASCII中使用'Amelie',你也可以在utf-8中使用它 .
第三,latin1支持有限数量的“特殊字符”,你不能指望从单字节编码支持与多字节编码相同的字符数 .
一个元说明:如果您对特定功能有特殊问题,您必须询问有关此特定问题的问题,而不是其他问题 . 否则没有答案对你有好处 .
如果你有json_encode()的问题,你必须提供你的问题:
代码
确切的错误消息
数据样本
只有在解决了这个问题之后,您才可以进行数据库交互,这可能是导致问题的原因 . 在编程中,根据猜测无法找到解决方案 .