2
4

7 回答 7

3

确保您的 my.cnf(可能位于 /etc/)具有以下条目:

[mysqld]
default-character-set=utf8
default-collation=utf8_general_ci
character-set-server=utf8
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'

[client]
default-character-set=utf8

进行更改后,您需要重新启动 mysql 服务。

在此处添加我的评论以使其更清晰。

确保设置了以下 HTTP 标头,以便浏览器知道预期的字符集。

Content-type: text/html; charset=UTF-8

还可以尝试将此标签添加到 html<head>标签的顶部

<meta http-equiv="Content-type" value="text/html; charset=UTF-8" />
于 2012-12-26T00:11:35.553 回答
1

原始数据已被编码为 UTF-8,结果在 Windows-1252 中解释,然后再次 UTF-8 编码。这真的很糟糕;这与标头可以修复的简单编码不匹配无关。您的数据实际上已损坏。

如果数据库中的数据正常(检查SELECT hex(column) FROM myTable)以查看它是否已经在数据库中进行了双重编码),那么您的代码必须在输出时将其转换为 UTF-8。

在您的项目中搜索 function utf8_encode,convert_to_utf8或 just iconvor的用法mb_convert_encoding。跑步

$ grep -rn "\(utf8_\(en\|de\)code\|convert_to_utf8\|iconv\|mb_convert_encoding\)" .

在您的应用程序的 /application 文件夹上应该足以找到一些东西。

另请参阅这些配置值:

<?php
var_dump(
    ini_get( "mbstring.http_output" ),
    ini_get( "mbstring.encoding_translation" )
);
于 2012-12-26T11:50:02.307 回答
1

要使浏览器正确显示。您应该检查三点:

  1. 脚本文件的编码。
  2. 连接的编码。
  3. 数据库或表模式的编码。

如果所有这些都兼容,您将获得所需的页面。

于 2012-12-26T02:23:33.367 回答
1

好吧,如果您绝对肯定地确定您的 mysql 客户端编码设置为utf8,则有两种可能的情况。一 - 双编码 - 由 Esailija 描述。

但是还有另一个:您的数据实际上是用 1251 编码的,而不是 utf-8 编码的。在这种情况下,您必须重新编码数据或在表上设置正确的编码。虽然它不是一个按钮推送任务
这里是一个手册(俄语)正是针对这种情况:http ://phpfaq.ru/charset#repair

简而言之,您必须转储您的表,在表上使用相同的编码集(以避免重新编码),将该转储备份到安全的地方,然后更改表定义以反映实际编码,然后将其加载回来。

于 2012-12-26T13:00:37.843 回答
0

经过2天的努力,终于解决了这个问题。感谢@yourcommonsense、@robsquires 和我的一个工作朋友提供帮助调试问题的好资源。

问题是在将 sql 文件转储到数据库(导入)时,服务器、数据库、客户端和连接的字符集被设置为latin1status命令有助于解决这个问题)。所以命令行也设置latin1为,这就是它显示正确字符的原因,但与 PHP 代码的连接是 UTF8,它试图再次对其进行编码。以双重编码结束。

解决方案

  1. mysqldump表格和数据(在 中latin1
  2. 转储数据库
  3. /etc/my.cnf如 Rob Squires 所述,将默认字符集设置为 UTF8
  4. 重启mysql
  5. 使用正确的字符集和排序规则再次创建数据库
  6. 将文件转储回其中

它工作正常。

感谢大家的贡献!

于 2012-12-28T05:25:26.227 回答
0

mysql_set_charset('utf8')mysql连接后试试 。然后它应该工作。

于 2012-12-26T11:02:44.523 回答
0

可能这也可能是由于未安装 mbstring 扩展(这将解释您的开发环境和生产环境之间的差异)

看看这篇文章,也许会给你更多的答案。

于 2012-12-26T00:47:47.793 回答