2010-06-04 38 views
1

我在我的mysql數據庫中保存了一些非常好的外來字符。這是我現在使用的例如:いち外國字符在php中沒有正確顯示

當我嘗試從數據庫中回顯該列時,它只顯示爲'??'

爲什麼在我試圖迴應外來字符時出現問號?

+3

http://www.joelonsoftware.com/articles/Unicode.html – Amber 2010-06-04 23:53:32

回答

0

在數據庫中使用什麼編碼,以及通過header()或HTML發送給瀏覽器的編碼是什麼?確保它們與您要輸入的數據相匹配。

0

您應該更改數據庫編碼以及將PHP標頭中的編碼指定爲UTF-8。 MySQL允許您選擇默認編碼,或者基於每個表或每個字段。

header('Content-Type: text/html; charset=UTF-8'); 

如果您保持數據庫的編碼和腳本的編碼一致,則不應該有任何問題。

2

很有可能你沒有設置適當的Mysql客戶端的編碼。
您必須發出SET NAMES <encoding>查詢,其中<encoding>是您的HTML頁面編碼。

請注意,沒有「外來字符」,但只有編碼
你要知道什麼編碼的字符,並在所有三個網絡應用部分正確設置它:

  • 數據庫。表的編碼必須設置爲與實際數據編碼相匹配。
  • PHP作爲數據庫的客戶端編碼。上面提到的SET NAMES。
  • 瀏覽器的編碼。通過標題設置提到上面的其他SO'ers或其他服務器設置。
0

爲了讓這些字符被支持,你必須選擇

  • 的字符集,其中包含這些字符,通常Unicode
  • 的字符映射到底層字節流的字符編碼,通常,UTF-8或更不頻繁地,UTF-16

讓我們繼續使用Unicode/UTF-8,因爲這是推薦的標準。你必須確保這些東西:

  • 你插入到數據庫中的數據是UTF-8,或者,如果不是,則必須將其轉換(例如用iconvmb_convert_encoding)。如果要從HTML表單插入數據,請確保將屬性accept-charset="utf-8"添加到<form>元素中。
  • 您的數據庫必須支持unicode。在MySQL中,請參閱CREATE DATABASE語法和supported character sets/collations(閱讀:編碼)。你應該選擇UTF-8/Unicode。
  • 數據庫必須知道PHP MySQL驅動程序將以UTF-8傳遞字符串(即客戶端編碼必須設置爲UTF-8)。在MySQL中,這是通過執行SQL語句SET NAMES UTF8完成的。
  • Web服務器必須聲明其內容以UTF-8編碼。在PHP中,這是用header('Content-type: text/html; charset=utf-8');
+0

檢查您的代碼之前後 – 2010-06-05 01:01:38

+0

@Col。彈片特赦? – Artefacto 2010-06-05 02:07:49

+0

@Col。彈片固定集名稱和接受字符集。順便說一句,請隨時自行修復它。 – Artefacto 2010-06-05 02:13:09