0

我有一个由 Codeigniter、Mysql 和 Apache 组成的网络服务器设置。

一个页面加载我从一个 mysql 表中获取数据,如下所示:

CREATE TABLE IF NOT EXISTS `names_table` (
`id` integer NOT NULL AUTO_INCREMENT PRIMARY KEY,
....
`name` varchar(180) NOT NULL,
....
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

服务器端的数据显示为

echo $this->db->get_where('names_table', array('id' => '6'))->result()->name;

提供给客户端的页面标头通过以下方式发送

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

另外我将元信息设置为

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

服务于客户端请求的 PHP 文件以 UTF-8 编码,没有 BOM,但名称显示为Schönefeld虽然应该是Schönefeld

对应id的name字段里面存储names_table536368c383c2b66e6566656c64

我花了几个小时寻找可能的解决方案,并且我已经应用了迄今为止我发现的所有提示,但没有工作。非常感谢。


编辑:

在向客户端显示数据之前,我运行

mb_detect_encoding($name_field);

它说它是UTF-8。我也在 Chrome 中查看设置了 UTF-8 编码的页面。

如果我理解正确,我不应该调用utf8_decode()从数据库返回的变量,因为浏览器已经知道文档是 UTF8 格式并采取适当的措施对其进行解码,对吗?

解决

事实证明,表中的数据没有正确导入。我必须使用关于它的字符集的明确声明,就像这里

4

2 回答 2

1

将连接设置为 UTF-8。

MySQL:

SET NAMES utf8;

使用 mysql:

mysql_set_charset('utf8', $connection);

使用 mysqli:

$connection->set_charset('utf8');

等等。

于 2012-11-01T16:34:38.047 回答
1

确保您的文件已保存为没有 BOM 的 UTF-8

这取决于您使用的 IDE,但例如在 Notepad++ 中有一个编码文件菜单。

于 2012-11-01T23:47:07.067 回答