2016-01-23 36 views
0

我一直对PHP/Mongo有很多编码问题。将PHP转换为Mongo的编码问题使用PHP

现在,我正在将一些数据从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

+0

你说它'在一个只是一个PHP脚本的页面上',但它仍然被浏览器占用?你有没有检查过你的HTML内容描述符? –

+0

对不起,我不完全确定你的意思。我确实设置了header('Content-type:text/plain; charset = utf-8');'在顶部。 – RhoVisions

+1

好的,你能告诉我们你的PHP脚本吗?另一个问题可能是Mongo设置与MySQL的方式。 –

回答

0
  • 不要使用mysql_ * API;更改为mysqli_ *

  • 请勿使用任何mb或utf8编码/解码例程;他们只是隐藏了“适当”的解决方案。

  • 连接到mysql后立即执行SET NAMES utf8

  • SHOW CREATE TABLE - 验证该表/列是CHARACTER SET utf8(或utf8mb4)

é是变为乱码为é。它通常表示latin1设置和utf8设置不匹配。

如果使用PDO:$db = new PDO('dblib:host=host;dbname=db;charset=UTF8', $user, $pwd);执行SET NAMES utf8

+0

我没有使用mysql_ * API;使用PDO。我会尝试'SET NAMES utf8'。 – RhoVisions

+0

我添加了关于PDO的注释。 –

+0

如上所述,所有的列都是utf8_unicode_ci,所以我将在明天工作时尝试charset。 – RhoVisions