2012-11-08 48 views
1

這真的讓我發瘋。我正在構建一個西班牙語網站(意思是很多拉丁字符),我正在使用Zend框架。字符集不工作 - 西班牙字符

當我保存一個á它顯示像á。我知道是一個字符集編碼,但我不明白爲什麼。

我的頭字符集是<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 我的數據庫是utf8_general_ci。我已經將charset更改爲其他人,並始終存在同樣的問題。

當我看到在我的數據庫,內容被保存,是一種á

任何想法,爲什麼會出現這種情況?謝謝!

+0

「保存」 如何與此同時,你可以,如果你使用EXT /庫MySQLi每個連接後執行的呢?這發生在哪裏? – deceze

+0

你是否在連接數據庫時設置名稱? 'mysql_query(「set names'utf8'」);' – martincarlin87

+0

我使用Zend-DB保存到數據庫,所以就像PDO – raygo

回答

1

這裏去幾招擺脫編碼頭痛:

  1. 您的數據庫,表和字段必須使用排序規則utf8_unicode_ci
  2. 確保您的代碼(HTML,PHP ... 全部爲)爲UTF-8編碼。
  3. 始終使用該meta標籤:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  4. 這是長:

如果你有機會到MySQL文件配置my.cnf剛加入這一行:

init-connect='SET NAMES utf8' 

這讓MySQL返回結果以UTF-8爲每個連接。

如果你不能,但使用的是PDO編輯my.cnf,打開連接是這樣的:如果你不使用PDO

$pdo = new PDO($dsn, $usr, $pwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); 

... 開始使用它,你還在等什麼呢?

$mysql->set_charset('utf8'); 

或者這樣,如果你使用普通的舊分機/ MySQL的:

mysql_set_charset('utf8', $connection); 
+0

對舊API使用'mysql_set_charset',否則可能會遇到'mysql_real_escape_string'問題。 – deceze

+0

@deceze好點! – Carlos

0

字符á和ASCII映射外的其他字符可以用unicode映射。

由於您正在使用UTF-8字符串和字符正確存儲表中的數據。

我建議你

  • 在你存儲數據
  • 你獲取數據

運行查詢SET NAMES UTF-8之前。這將獲取您的UTF-8數據,照顧ASCII映射外部的字符。

在輸出數據時,請確保您強制/指示瀏覽器使用UTF-8字符集來打印數據。