我有一个由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
答案 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 ++中有一个编码文件菜单。