PHP中MySQL的UTF-8字符集问题

PHP中MySQL的UTF-8字符集问题,php,mysql,utf-8,include,eval,Php,Mysql,Utf 8,Include,Eval,这真让我抓狂 所有相关的PHP输出脚本设置标题(在本例中,只有一个文件-主PHP脚本): HTML元设置在head中: <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 我一直在写一门课来做一些翻译。。当类使用fopen、fputs等写入文件时,一切都很好,正确的字符会出现在我的输出文件中(这些文件是以php数组的形式写入的,并以.php或.htm文件的形式保存到文件系统中)。eval()会正确地

这真让我抓狂

所有相关的PHP输出脚本设置标题(在本例中,只有一个文件-主PHP脚本):

HTML元设置在head中:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
我一直在写一门课来做一些翻译。。当类使用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'");
我没有看到正确的字符,而是得到了您希望在DB中使用错误字符集的常见crud。例如:

Propriétés
而不是:

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

我错过了什么?我知道这不是PHP,因为网站显示了包含translation.PHP或.htm文件中的正确字符,只有当我处理MySQL数据库时,我才发现这些问题。PHPMyAdmin使用错误的字符显示条目,所以我假设它发生在PHP“写入”时我已经在堆栈上检查了类似的问题,但是没有一个答案(所有的答案都被处理)给我任何线索


此外,任何人都会想到使用include$filename与eval(file\u get\u contents($filename))的速度差异。

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

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

/* Set MySQL communication encoding */
mysql_set_charset("UTF8");
您还需要将DB编码设置为正确的编码,以及每个表的编码和字段的编码


最后但并非最不重要的一点是,您的php文件的编码也应该匹配。

mysql中有一个
mysql\u set\u字符集('utf8');
。在另一个查询的开头运行查询。

您说您看到的是“您希望使用错误字符集的常见crud”。但实际上,该crud是使用utf8\u encode()创建的在一个已经使用UTF8的字符串上,很可能您没有在任何地方使用“错误编码”,而是超过了编码到UTF8的次数

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


您应该只使用
集合名称utf8
作为初始查询,因为它已经设置了
字符集\u结果
字符集\u客户端
字符集\u连接
选项。@galymzhan是的,已经用几种方法尝试过了……所以您建议:mysql\u查询(“SET character_SET_results='utf8',character_SET_client='utf8',character_SET_connection='utf8',character_SET_database='utf8',character_SET_server='utf8'”;@galymzhan尝试过,没有任何效果…刚刚尝试实现了您的优秀类。现在我把它看作是“crud”输出的Propri。©tÃs Note与最初的“crud”不同“。我想你是对的,你能从这两个例子中推断出这可能被编码了多少次吗?仅供参考,我没有运行任何utf8_encode()来删除最后的注释!这非常有效!优秀的php类!谢谢!小心!使用它来修复字符串(理想情况下,仅一次),并尝试以一种方式设置您的环境,使您在数据库中输入的任何内容都以完全相同的方式输出。
propriétés
/* HTTP charset */
header("Content-Type:text/html; charset=UTF-8");

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