我一直在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引擎,charset utf8,collation utf8_unicode_ci
答案 0 :(得分:0)
不要使用mysql_ * API;改为mysqli _ *
不要使用任何mb或utf8编码/解码程序;他们只是隐藏“适当的”解决方案。
在连接到mysql之后,执行SET NAMES utf8
。
SHOW CREATE TABLE
- 验证表格/列是CHARACTER SET utf8
(或utf8mb4)
é
是é
的Mojibake。它通常表示latin1
设置和utf8
设置不匹配。
如果使用PDO:$db = new PDO('dblib:host=host;dbname=db;charset=UTF8', $user, $pwd);
或执行SET NAMES utf8
。