【问题标题】:Double UTF-8 encoding, but why? PHP/MySQL双 UTF-8 编码,但为什么呢? PHP/MySQL
【发布时间】:2011-08-17 08:34:54
【问题描述】:

我有一些表格,可以将一些数据插入 MySQL 数据库,并且由于某种原因,这些字符被双重 utf-8 编码。你在我网站的前端看不到它,但在后端你会看到,如果我查看来自 phpmyadmin 的数据,它是双重编码的。

另外,要显示从 phpmyadmin 输入的数据,我必须 utf8_encode 它。

如果我在将数据放入数据库之前对我的数据使用uft8_decode(),它可以工作,但是我必须再次使用utf8_encode() 才能正确显示我的数据,我想找到一个更好的解决方案重写我的大部分代码。

我要处理的字符是丹麦语 æ、ø 和 å 字符。

我将在 php.ini 中可以找到的所有设置都设置为 utf-8,在 phpmyadmin 中可以找到的所有设置都设置为 utf8,将 html 元标记设置为 utf-8,但我仍然要处理这个错误。

所以我的问题是,有谁知道为什么会发生这种情况,或者我该如何解决?..

更新: 运行 Jako 建议的 mysql 代码后,当数据来自前端时,数据在数据库后端正确编码,但我仍然需要运行 @987654325 @在前端正确显示数据,有什么想法吗?..

更新 2: 同样,在运行 this question 答案中的代码后,我仍然遇到问题,编码现在打开和关闭 utf8,我怀疑 phpmyadmin 以某种方式重置编码。我找到了一种新的做事方式,并且完美无缺,如下面的回答中所述...

【问题讨论】:

    标签: php mysql utf-8 character-encoding


    【解决方案1】:

    好的,我找到答案了!!我搜索了更多,(已经这样做了几个小时)并发现了这个问题:Whether to use “SET NAMES”

    使用该问题的答案,我运行了这个查询:

    mysql_query("SET character_set_client = UTF8");
    mysql_query("SET character_set_results = UTF8");
    mysql_query("SET character_set_connection = UTF8");
    mysql_query("SET names UTF8");
    

    就是这样,它现在在我所有的 php 脚本上都可以正常工作。仍然感谢 Jako 以正确的方式引导我。 ;)

    更新: 好的,由于编码打开和关闭,并且设置没有保持这种状态,我找到了一个有效的新解决方案。我在连接脚本中添加了mysql_set_charset()

    mysql_set_charset("UTF8");
    

    它每次都从数据库中为我提供正确的数据并插入正确的数据,所以这只是一行代码。

    【讨论】:

    • 您应该从已弃用的mysql_* 界面切换到mysqli_I
    【解决方案2】:

    我过去遇到过类似的问题,这对我有用。

    mysql_query("SET names UTF8");
    

    【讨论】:

    • 让我更进一步,我意识到我必须在我用于 php 连接的 mysql 用户上使用它,现在它至少不会在数据库中得到双重编码,但现在它没有在前端正确编码,所以我已经完成了一半......
    • 很高兴我能提供帮助,我之前也遇到过同样的问题,试图找到解决方案非常有压力。
    猜你喜欢
    • 2021-12-17
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    • 2014-04-09
    • 2013-07-05
    相关资源
    最近更新 更多