2012-11-01 164 views
0

我有一個包含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

+0

你是否在CI數據庫配置中將連接編碼設置爲'utf8'?我不是一個CI人,所以不能告訴你究竟在哪裏,但那是你的問題...... – deceze

+0

是的,我已經設置字符集爲UTF8和數據庫整理爲utf8_bin。 – Philipp

+0

在* Codeigniter數據庫連接配置文件*中,對不對? – deceze

回答

1

將連接設置爲UTF-8。

的MySQL:

SET NAMES utf8; 

與MySQL:

mysql_set_charset('utf8', $connection); 

隨着mysqli的:

$connection->set_charset('utf8'); 

等等

+0

我把這個聲明之前,每個查詢數據庫進行測試。這是行不通的。 – Philipp

+0

您不會在每個查詢之前放置它。你在創建連接後立即放置它。 –

+0

P.S.還要確保字符集在你的服務器上沒有被設置爲不同的東西,因爲它會覆蓋你的html元標記。在Apache中有一個指令:AddDefaultCharset UTF-8 –

1

確保您的文件已保存爲UTF-8跟着t BOM

這取決於您使用的IDE,但例如在Notepad ++中有一個編碼文件菜單。

相關問題