使用PHP将MySQL转换为Mongo时的编码问题

使用PHP将MySQL转换为Mongo时的编码问题,php,mysql,mongodb,encoding,utf-8,Php,Mysql,Mongodb,Encoding,Utf 8,一般来说,我在PHP/Mongo中遇到了很多编码问题 现在,我正在将一些数据从MySQL转换为Mongo。我有一个字符串,其中包含一个字符,但当我尝试将其编码为UFT-8时(通过mb\u convert\u encoding,uft8\u encode),它会变成。我确信其他字符串也包含其他重音字符 我尝试了mb\u-detect\u-encoding,它告诉我字符串是UTF-8,但是当我尝试mb\u-check\u-encoding($string,'UTF-8')时,它返回false 基本上

一般来说,我在PHP/Mongo中遇到了很多编码问题

现在,我正在将一些数据从MySQL转换为Mongo。我有一个字符串,其中包含一个
字符
,但当我尝试将其编码为UFT-8时(通过
mb\u convert\u encoding
uft8\u encode
),它会变成
。我确信其他字符串也包含其他重音字符

我尝试了
mb\u-detect\u-encoding
,它告诉我字符串是UTF-8,但是当我尝试
mb\u-check\u-encoding($string,'UTF-8')
时,它返回false

基本上,我不知道怎么了。这是在一个网页,只是一个PHP脚本,没有HTML。对于这个问题有什么建议,或者在插入Mongo时一般保持字符编码

下面是有问题的脚本:

MySQL表使用的是MyISAM引擎、字符集utf8、排序规则utf8\uUnicode\uCI

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

  • 不要使用任何mb或utf8编码/解码例程;它们只是隐藏了“正确”的解决方案

  • 连接到mysql后,立即执行
    设置名称utf8

  • SHOW CREATE TABLE
    --验证表/列是否为
    字符集utf8
    (或utf8mb4)

Ã
é
的代名词。它通常表示
latin1
设置和
utf8
设置不匹配


如果使用PDO:
$db=new PDO('dblib:host=host;dbname=db;charset=UTF8',$user,$pwd)或执行
设置名称utf8

你是说它“在一个仅仅是PHP脚本的页面上”,但它仍然被浏览器使用?你检查过你的HTML内容描述符了吗?对不起,我不太清楚你的意思。我确实设置了
标题('Content-type:text/plain;charset=utf-8')在顶部。好的,你能给我们看看你的PHP脚本吗?另一个问题可能是Mongo与MySQL的设置方式。添加了脚本和MySQL表设置。与普通文本读取器读取一样,
Ã
是正确的UTF编码-任何扩展ASCII字符都会转换为两个字节,而不是一个字节的
é
。我不认为MySQL的导出是错误的——它包含正确的UTF-8值。它必须是您的MongoDB导入。我实际上没有看到在PHP脚本中初始化mongo数据库的位置-也许需要在那里显式指定编码参数?我没有使用mysql_*API;使用PDO。我将尝试使用它设置名称utf8。我添加了一个关于PDO的注释。如上所述,所有列都是utf8\U unicode\U ci,所以我明天将在工作中尝试字符集。