我有一个由 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_table
了536368c383c2b66e6566656c64。
我花了几个小时寻找可能的解决方案,并且我已经应用了迄今为止我发现的所有提示,但没有工作。非常感谢。
编辑:
在向客户端显示数据之前,我运行
mb_detect_encoding($name_field);
它说它是UTF-8。我也在 Chrome 中查看设置了 UTF-8 编码的页面。
如果我理解正确,我不应该调用utf8_decode()
从数据库返回的变量,因为浏览器已经知道文档是 UTF8 格式并采取适当的措施对其进行解码,对吗?
解决
事实证明,表中的数据没有正确导入。我必须使用关于它的字符集的明确声明,就像这里