UTF-8法语重音字符问题

5
当我使用phpmyadmin查看mysql数据库中的数据时,字符会被存储为é à ç。但是,当我使用php在一个具有以下结构的html文档中显示这些数据时:
<!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时显示正常,而静态文件则不会,这可能意味着你的源文件(正确地)采用了UTF-8格式,但来自数据库的数据以错误的编码格式到达。无论发生什么事情,请坚持使用UTF-8。 - ubik
谢谢您的回复,我已经检查了数据库并发现排序规则设置为latin1_swedish_ci,这可能是问题的源头吗? - Mbarry
1
是的,这就是问题的根源,您将数据存储为 ASCII 格式在 MySQL 中,但是尝试在 HTML 中以 UTF8 格式显示。 - Nelson
是的,那很可能就是问题所在。 - ubik
在phpmyadmin的utf-8菜单级别上有很多选择,我应该选择哪一个? - Mbarry
2个回答

5

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

SET NAMES utf8;
SET CHARACTER SET utf8;

同时确保每个表都设置了CHARACTER SETUTF-8

或者您也可以更新服务器配置


执行建议的 SET NAMES utf8; 修复了问题。谢谢! - Mbarry
请参见 https://dev59.com/v3A75IYBdhLWcg3wBkO1,了解如何在服务器端自动执行此操作的说明。 - ubik

2
看起来是配置问题。很可能是你的数据库或驱动程序没有使用UTF-8。
当你切换到windows-1552时,来自数据库的数据显示正常,而静态文件不正常,这意味着你的源文件(正确地)使用UTF-8编码,但是来自数据库的数据以错误的编码格式到达。
无论发生了什么,请坚持使用UTF-8。
更新:有一条线程解释了如何自动设置连接的编码: 在my.cnf中将MySQL默认字符集更改为UTF-8?

谢谢Pedro,问题已经解决了,我不会再坚持使用windows-1552了。 只要涉及到Windows这个词,就会有问题,哈哈。谢谢。 - Mbarry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接