2013-04-20 57 views
5

当我使用phpmyadmin查看存储在mysql数据库中的数据时,字符完全按照éàç存储,但是当我使用php在具有以下精确结构的html文档上显示这些数据时:UTF-8法语重音字符问题

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title></title> 
</head> 

<body> 
</body> 
</html> 

我有方形的,而不是语音字符,但是,我没有这个问题有没有被在同一个页面从MySQL装上静态内容的任何重音字符。

当我看到他们似乎是相同的页面的源代码!例如:MySQL的源数据的

éçà 

部分:

éçà 

我试图与

替换

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

显示为对源代码的静态数据的

部分

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

并因此我得到了一个固定的MySQL,静态与正方形!

任何提示?

+1

看起来像一个错误配置问题。也许你的数据库驱动程序不使用UTF-8? 当您更改为'windows-1552'并且静态文件不显示时,来自数据库的数据显示OK,这可能意味着您的源文件以UTF-8格式(正确),但数据库中的数据以错误的编码格式到达。 无论发生什么,坚持UTF-8。 – ubik 2013-04-20 17:20:57

+0

谢谢您的回复,我已经检查了数据库,发现排序规则设置为'latin1_swedish_ci',这可能是问题的根源吗? – Mbarry 2013-04-20 17:24:34

+1

是的,这是问题的根源,你存储你的数据在MySQL ascii中,但然后试图显示它在utf8在你的html .. – Nelson 2013-04-20 17:26:32

回答

5

这是很常见的字符集问题,您需要手动设置连接编码为MySQL连接(你建立连接后执行这些应该是先查询):

SET NAMES utf8; 
SET CHARACTER SET utf8; 

,并且确保每个表都有CHARACTER SET集到UTF-8。您可以更新server configuration

+0

使用'SET NAMES utf8;'固定,按照建议执行。谢谢! – Mbarry 2013-04-20 17:38:49

+0

有关如何在服务器端自动执行此操作的说明,请参阅http://stackoverflow.com/questions/3513773/change-mysql-default-character-set-to-utf8-in-my-cnf。 – ubik 2013-04-21 11:32:50

2

看起来像一个错误配置问题。很可能您的数据库或驱动程序不使用UTF-8。

当您更改为windows-1552且静态文件不显示时,来自数据库的数据显示OK,这可能意味着您的源文件以UTF-8格式(正确),但数据库中的数据正在到达以错误的编码格式。

无论发生什么事,坚持使用UTF-8。

UPDATE:没有解释如何自动设置编码的连接线程:

Change MySQL default character set to UTF-8 in my.cnf?

+0

谢谢佩德罗,问题已经解决,我不会坚持windows-1552。 那里有一个术语窗户有问题大声笑。谢谢 – Mbarry 2013-04-20 17:40:07