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,带有正方形的静态!

任何提示?

4

2 回答 2

5

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

SET NAMES utf8;
SET CHARACTER SET utf8;

并确保每张桌子都CHARACTER SET设置为UTF-8.

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

于 2013-04-20T17:22:29.603 回答
2

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

当您更改为时来自数据库的数据显示正常windows-1552而静态文件不显示,这一事实可能意味着您的源文件(正确)采用 UTF-8,但来自数据库的数据以错误的编码格式到达.

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

更新:有一个线程解释了如何自动设置连接的编码:

在 my.cnf 中将 MySQL 默认字符集更改为 UTF-8?

于 2013-04-20T17:29:10.317 回答