数据库中的UTF8无法正确显示(Codeigniter)

时间:2012-11-01 15:56:34

标签: php mysql codeigniter utf-8 collation

我有一个由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

names_table中具有相应ID的名称字段中存储了 536368c383c2b66e6566656c64

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


编辑:

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

mb_detect_encoding($name_field);

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

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

分辨

事实证明,表中的数据未正确导入。我不得不使用关于它的字符集的明确声明,例如here

2 个答案:

答案 0 :(得分:1)

将连接设置为UTF-8。

MySQL的:

SET NAMES utf8;

使用mysql:

mysql_set_charset('utf8', $connection);

使用mysqli:

$connection->set_charset('utf8');

答案 1 :(得分:1)

确保您的文件已保存为 UTF-8,无BOM

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