当前位置:  开发笔记 > 编程语言 > 正文

MongoDB PHP UTF-8问题

如何解决《MongoDBPHPUTF-8问题》经验,为你挑选了1个好方法。

假设我需要插入以下文档:

{
    title: 'Péter'
}

(注意é)

当我使用以下PHP代码时,它给出了一个错误...:

$db->collection->insert(array("title" => "Péter"));

......因为它需要是utf-8.

所以我应该使用这行代码:

$db->collection->insert(array("title" => utf8_encode("Péter")));

现在,当我请求文档时,我仍然要解码它...:

$document = $db->collection->findOne(array("_id" => new MongoId("__someID__")));
$title = utf8_decode($document['title']);

有没有办法自动化这个过程?我可以更改MongoDB的字符编码(我正在迁移使用cp1252西欧(latin1)的MySQL数据库吗?

我已经考虑过更改Content-Type-header,问题是所有静态字符串(硬编码)都不是utf8 ...

提前致谢!蒂姆



1> Alix Axel..:

JSON和BSON只能对有效的UTF-8字符串进行编码/解码,如果您的数据(包含的输入)不是UTF-8,您需要在将其传递给任何JSON相关系统之前对其进行转换,如下所示:

$string = iconv('UTF-8', 'UTF-8//IGNORE', $string); // or
$string = iconv('UTF-8', 'UTF-8//TRANSLIT', $string); // or even
$string = iconv('UTF-8', 'UTF-8//TRANSLIT//IGNORE', $string); // not sure how this behaves

我个人更喜欢第一个选项,请参阅iconv()手册页.其他选择包括:

mb_convert_encoding()

utf8_encode(utf8_decode($string))

您应始终确保您的字符串是UTF-8编码的,甚至是用户提交的字符串,但是既然您提到要从MySQL迁移到MongoDB,您是否尝试将当前数据库导出为CSV并使用导入脚本与Mongo?他们应该处理这个......


编辑:我提到BSON只能处理UTF-8,但我不确定这是否完全正确,我有一个模糊的想法,BSON使用UTF-16或UTF-32编码/解码数据,但我可以'现在检查一下.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有