【问题标题】:UTF-8 converting data [duplicate]UTF-8 转换数据 [重复]
【发布时间】:2016-01-10 22:26:14
【问题描述】:

我使用 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。

【问题讨论】:

  • 数据库本身是utf8编码的吗?尝试运行查询SHOW CREATE TABLE yourTableHere
  • 不,数据库是 Latin1 编码的,正如我所说的那样。但我暂时不能碰它……
  • 数据库charset,数据库collat​​ion(charset与collat​​ion不同)和SQL连接都应该是同一个charset。
  • MySQL 编码称为utf8,而不是utf-8。你从那里开始怎么样?
  • 我已经完成了更正,但问题始终存在。

标签: php mysql pdo utf-8 zend-framework2


【解决方案1】:

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

其次,基本的 latin1 字符在 utf-8 中是一样的。表示 utf-8 中的 'Amelie' 与 latin1 和 ASCII 中的 'Amelie' 相同。意味着在 ASCII 中包含“Amelie”,您也可以在 utf-8 中使用它。

第三,latin1 支持有限数量的“特殊字符”,您根本无法期望单字节编码支持的字符数量与多字节编码相同。

元注释:如果您对特定功能有特殊问题,您必须就该特定问题提出问题,而不是其他问题。否则没有答案对你有好处。

如果您对 json_encode() 有疑问,您必须提供您的问题:

  • 代码
  • 确切的错误消息
  • 数据样本

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

【讨论】:

  • 好的,所以告诉我为什么我的 json_encode 不起作用......而 json_last_error_msg() 告诉我我的错误是 UTF-8 格式错误的字符串......
  • 此外,我的问题不值得 -1 ...
  • @Amelie 您检测到您的编码为 ASCII,但 json_encode 抱怨?这……至少可以说很奇怪。
猜你喜欢
  • 2018-04-01
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 2014-08-15
  • 1970-01-01
  • 2011-06-06
  • 2012-04-23
  • 1970-01-01
相关资源
最近更新 更多