0

这真的是我的疯子......

所有相关的 PHP 输出脚本都设置了标题(在这种情况下只有一个文件 - 主 php 脚本):

header("Content-type: text/html; charset=utf-8");

HTML 元设置在 head 中:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

所有 Mysql 表和相关列设置为:

utf8_unicode_ci     Unicode (multilingual), case-insensitive

我一直在编写一个类来进行一些翻译。当该类使用 fopen、fputs 等写入文件时,一切正常,正确的字符出现在我的输出文件中(它们被写为 php 数组并以 . php 或 .htm 文件。eval() 正确地返回 .htm 文件,当我想使用它们时只包含 .php 文件。一切都很好。

可能是当我尝试为我的数据库创建翻译条目时。我的数据库连接类在初始连接之后直接添加了以下行:

 mysql_query("SET NAMES utf8, character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'");

我没有看到正确的字符,而是得到了您期望在数据库中使用错误的字符集的常见问题。例如:

Propriétés

代替:

propriétés

甚至不要让我开始使用俄语、日语等字符!但是使用 UTF8 不应该使任何单一语言字符集成为问题......

我错过了什么?我知道它不是 PHP,因为该站点从包含的翻译 .php 或 .htm 文件中显示了正确的字符,只有在我处理 MySQL DB 时才会遇到这些问题。PHPMyAdmin 用错误的字符显示条目,所以我假设它发生在 PHP“写入”到 MySQL 时。已经在堆栈上检查了类似的问题,但没有一个答案(所有这些都得到了照顾)给我任何线索......

此外,任何人都对使用 include $filename 与 eval(file_get_contents($filename)) 的速度差异有想法。

4

3 回答 3

1

以下是确保这些字符得到良好显示所需的全部内容:

/* HTTP charset */
header("Content-Type:text/html; charset=UTF-8");

/* Set MySQL communication encoding */
mysql_set_charset("UTF8");

您还需要将 DB 编码设置为正确的编码,以及每个表的编码和字段的编码

最后但同样重要的是,您的 php 文件的编码也应该匹配。

于 2012-04-06T18:01:28.337 回答
1

您说您看到的是“使用错误字符集通常会出现的问题”。但实际上,这个杂物是通过在已经 UTF8 字符串上使用 utf8_encode() 创建的,所以很可能您没有在任何地方使用“错误编码”,而是超过了您编码为 UTF8 的时间。

您可以查看我为解决此类问题而制作的库:

https://stackoverflow.com/a/3521340/290221

于 2012-04-06T18:07:17.380 回答
0

mysql中有一个mysql_set_charset('utf8');。在另一个查询的开头运行该查询。

于 2012-04-06T18:03:19.920 回答