显示 而不是£

时间:2011-02-22 13:32:31

标签: php mysql encoding character-encoding

从mysql数据库中提取数据时,符号 显示而不是£

有问题的字段整理为utf8_general_ci

我在页面的head标签上也有<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

有什么想法吗?

5 个答案:

答案 0 :(得分:30)

在对数据库执行任何查询之前使用mysql_query("SET NAMES 'UTF8'");

答案 1 :(得分:6)

正如其他人所说,你应SET NAMES 'UTF8'识别它不是默认的字符集。也可能是错误的字符被插入到数据库中。

检查源是否确实是UTF-8格式,并导入为UTF-8。 (您可以在使用上述查询设置NAMES后重新导入数据。)

如果通过HTML表单输入,请检查包含数据输入表单的HTML页面是否也包含正确的meta元素。

同时检查HTTP服务器发送给您的标头(您可以使用Firebug扩展程序执行此操作)。您可以在包含以下内容的 .htaccess 文件中为服务器设置默认字符集:

AddDefaultCharset UTF-8

答案 2 :(得分:5)

如果您使用的是PHP,设置字符编码的推荐方法是mysql_set_charset()。

我对MySQL的初始设置是:

<?php
$db = mysql_connect( ... );
mysql_set_charset( 'utf8', $db );

header('Content-Type: text/html; charset=UTF-8');
?>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

这样,我从来没有遇到编码问题。

答案 3 :(得分:3)

请阅读http://mysqldump.azundris.com/archives/60-Handling-character-sets.html

简短版本:在MySQL字符串字段中附加了字符集,因此具有连接。连接字符集是客户端字符集的服务器端表示,它是服务器认为客户端正在使用的内容。

设置连接字符集的简短方法是SET NAMES utf8,如上面的评论所述。

如果字段字符集与连接字符集不同,MySQL将尝试将字段转换为连接字符集。如果两者相等,它就不会尝试这样做。

调试的方法是,如本文所示,使用HEX()函数查看字段,检查实际的磁盘数据是什么以及它是否正确。

然后连接到数据库,如果您实际使用的是utf8,则使用SET NAMES utf8设置连接到正确的客户端字符集。然后再次输出字符串的HEX(),它应该是相同的。如果不是,则连接没有正确的字符集,例如,如果您忘记设置名称utf8。

您可以使用手册中的SET NAMES定义http://dev.mysql.com/doc/refman/5.5/en/charset-connection.html

在MySQL中配置默认​​连接字符集
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;

如果你将它放入my.cnf的mysqld部分并重新启动服务器,则不再需要SET NAMES,因为默认情况下连接现在将具有utf8。

答案 4 :(得分:2)

如果你使用jquery和ajax获取文本,也会发生这种情况, 尝试用utf8_encode($ string)

回显字符串