2009-09-16 82 views
1

我在顯示正確字符的Zend Framework應用程序中遇到問題。關於Zend DB - 一般數據顯示不正確的問題

EG/ 的Rue de l'Odeon酒店

顯示爲:

的Rue de L'Odon的

當由通過應用視圖中顯示它顯示通過web服務信息,並且還。

我已經tryed以下東西:

1)設置在視圖中的字符編碼。

$view->setEncoding('UTF-8'); 

2)保證了底層數據庫上COL /表編碼是UTF8(MySQL數據庫)

ALTER TABLE tablename CONVERT TO CHARACTER SET utf8; 

3)創建我DB連接當傳遞的字符集varaible到Zend_Db的::工廠方法。這是我通過註冊表獲得的對象的配置部分。

[_config:protected] => Array 
    (
     [host] => localhost 
     [username] => root 
     [password] => --------------- 
     [dbname] => db_staging 
     [charset] => utf8 
     [options] => Array 
      (
       [caseFolding] => 0 
       [autoQuoteIdentifiers] => 1 
      ) 

回答

3

下面幾個問題。我知道這些聽起來很愚蠢,但是當我這樣陷入困境時,我會自動地認爲這很明顯,我會花上幾天的時間踢自己! :)首先,我假設你在使用ZF 1.8給出上面的字符集選項?如果沒有(或者即使下面的列表沒有解決它)切換回舊的方法,看看是否能解決任何問題。

  1. 你能否確認表覈對是現在utf8_general_ci一樣,都是文本字段?上面的命令沒有提到一個排序規則,所以我認爲這被設置爲默認排序規則(當缺少和字符集是utf8時,這是默認排序規則)。
  2. 現在,重新發送該命令,並將排序規則設置爲utf8_unicode_ci(比一般排序規則更慢但更準確 - 性能只需稍微打一點,但可能有助於現有數據表)。
  3. 您是否重新輸入數據才能確定?即使將其輸入到已知的UTF-8編輯器中,只是爲了仔細檢查你是否已經複製了utf8字符;和
  4. 你是100%確定源文本是UTF-8而不是ISO-8859-1或Windows 1252?
  5. 確保視圖編碼儘早設置(並將新視圖添加到ViewRenderer助手)。
  6. 使用什麼mysql驅動程序? Mysqli還是PDO?您是否使用了適合您的選項的適當設置?
  7. 是否有任何視圖覆蓋字符編碼?編碼取自Content-Type頭,然後是任何XML聲明(例如XHTML),最後來自Content-Type的meta http-equiv標記。這也是優先順序 - 如果先前的聲明不同意UTF-8,該頁面可能不會使用您所期望的。您可以通過在前端控制器上設置正確的標頭集(通常爲「Content-Type:text/html; charset = UTF-8」)來重置標頭。
  8. 要檢測編碼是否被瀏覽器錯誤檢測到,您還可以通過重置頁面的瀏覽器編碼來手動調試,例如,在Firefox中查看>字符編碼。檢查是ISO或Windows編碼顯示效果更好。
  9. 嘗試將模板中的文本輸出包裝在utf8decode()中 - 也許有些東西是雙重編碼的?奇怪的事情發生了...

我的UTF-8危機清單;)。讓我知道列出的任何東西都有幫助。我認爲它涵蓋了我能想到的大部分項目。

+0

什麼,如果ZF顯示'小姐ã O',而不是'misso'或任何怪異?我希望它顯示'missão' – 2010-11-09 17:05:31