我有一個包含Codeigniter,Mysql和Apache的web服務器設置。來自數據庫的UTF8無法正確顯示(Codeigniter)
一個頁面加載我取從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儘管應該舍內費爾德。
與names_table
中相應的ID的名稱字段已存儲536368c383c2b66e6566656c64。
我花了幾個小時尋找可能的解決方案,並且我已經應用了迄今爲止發現的所有提示而不工作。非常感謝你。
編輯:
之前顯示的數據到客戶端我運行
mb_detect_encoding($name_field);
表示,它是UTF-8。我正在查看設置了UTF-8編碼的Chrome頁面。
如果我理解正確,我不應該從數據庫返回的變量上調用utf8_decode()
,因爲瀏覽器已經理解文檔是UTF8並採取適當的操作來解碼它,對嗎?
議決
事實證明在表中的數據不正確導入。我不得不使用關於字符集的明確聲明,如here
你是否在CI數據庫配置中將連接編碼設置爲'utf8'?我不是一個CI人,所以不能告訴你究竟在哪裏,但那是你的問題...... – deceze
是的,我已經設置字符集爲UTF8和數據庫整理爲utf8_bin。 – Philipp
在* Codeigniter數據庫連接配置文件*中,對不對? – deceze