为什么在我在mysql中插入已经是UTF8的字符串之前必须使用utf8_decode?

时间:2012-09-18 19:16:43

标签: php json utf-8

我遇到了一个问题,我设法通过简单地尝试不同的选项来修复,但我不明白它为什么会起作用,这对我来说没有意义......

在这里,我从Facebook接收UTF8编码的JSON,我的表在utf8_general_ci,我的数据库连接也是UTF8编码。

如果我没有做任何特殊的事情,则将字符串插入为

  

法比亚©Ñ

但如果我在插入之前对其进行utf8_decode,则将其插入为

  

FABIEN

当我在字符串上调用mb_detect_encoding时,它会返回UTF8。

任何人都可以解释为什么我必须使用utf8_decode才能工作吗?或者更好的是,如何修复我的代码,以便我不必调用utf8_decode?

提前致谢。

2 个答案:

答案 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?