【发布时间】:2016-01-23 21:18:46
【问题描述】:
我在使用 PHP/Mongo 时遇到了很多编码问题。
现在,我正在将一些数据从 MySQL 转换为 Mongo。我有一个包含é 的字符串,但是当我尝试将其编码为 UFT-8(通过mb_convert_encoding、uft8_encode)时,它变成了é。我确定其他字符串也包含其他重音字符。
我试过mb_detect_encoding,它告诉我字符串是UTF-8,但是当我做mb_check_encoding($string, 'UTF-8')时,它返回false。
基本上,我不知道出了什么问题。这是在一个只是 PHP 脚本的页面上,没有 HTML。对这个问题有什么建议,或者在插入 Mongo 时一般保持字符编码?
这里是有问题的脚本:https://plnkr.co/edit/eAkLxfklzLNCsZTBPKsX
MySQL 表使用 MyISAM 引擎,字符集 utf8,排序规则 utf8_unicode_ci
【问题讨论】:
-
您是说它“在一个只是 PHP 脚本的页面上”,但它仍然被浏览器使用?你检查过你的 HTML 内容描述符吗?
-
抱歉,我不太清楚你的意思。我确实在顶部设置了
header('Content-type: text/plain; charset=utf-8');。 -
好的,你能告诉我们你的 PHP 脚本吗?另一个问题可能是 Mongo 与 MySQL 的设置方式。
-
添加脚本和 MySQL 表设置
-
因此
é是普通文本阅读器读取的正确 UTF 编码 - 任何扩展的 ASCII 字符都将转换为两个字节而不是一个字节é。我不认为 MySQL 的导出不正确 - 它包含正确的 UTF-8 值。它必须是您的 MongoDB 导入。我实际上没有看到您在 PHP 脚本中初始化 mongo 数据库的位置 - 也许您需要在那里显式指定您的编码参数?
标签: php mysql mongodb encoding utf-8