我遇到了一个问题,我设法通过简单地尝试不同的选项来修复,但我不明白它为什么会起作用,这对我来说没有意义......
在这里,我从Facebook接收UTF8编码的JSON,我的表在utf8_general_ci,我的数据库连接也是UTF8编码。
如果我没有做任何特殊的事情,则将字符串插入为
法比亚©Ñ
但如果我在插入之前对其进行utf8_decode,则将其插入为
FABIEN
当我在字符串上调用mb_detect_encoding时,它会返回UTF8。
任何人都可以解释为什么我必须使用utf8_decode才能工作吗?或者更好的是,如何修复我的代码,以便我不必调用utf8_decode? p>
提前致谢。
答案 0 :(得分:1)
如果您的数据库/表格/字段为 utf8_general_ci 且字符串为 UTF-8 ,则在插入字符串之前不应转换该字符串。
您应该从数据库中进行选择,然后在使用HTML进行打印之前,您应该使用以下代码从UTF-8转换为Latin1(iso-8859-1):
mb_convert_encoding($selected_string, 'utf-8', 'iso-8859-1')
答案 1 :(得分:0)
发现问题后,必须在与PDO建立与DB的连接后执行命令“SET NAMES utf8”。我使用的是旧版本的PHP(5.3.6),并且在连接字符串中忽略了charset = utf8 ...
请参阅此问题:PHP PDO: charset, set names?