2009-10-04 37 views
3

Diacritic signs http://img98.imageshack.us/img98/3383/dijakritickiznakovi.gif克羅地亞變音符號(UTF-8)

所以,初級講座顯示標題符號應顯示的方式。
下面列出了UTF-8實體HTML(utf-8)標題(這裏是列表:LINK
最後一行顯示存儲在我的數據庫中的內容。
數據庫表的整理是utf8_unicode_ci
我想db中的符號不​​應該和我的情況一樣嗎? 從數據庫加載時,它們在頁面上正確顯示,但它們都不是由給定鏈接的utf-8表格顯示的。即使我看到他們正確,也許別人不會?

+0

你使用什麼編程語言? – sorin

回答

4

設置MySQL表字符集是不夠的 - 您還應該小心地爲客戶端,連接和結果設置正確的字符集,每個服務器的默認值可能會有所不同,從而使您的數據庫比可移植的數據庫更少:相同數據庫內容可能會以不同的方式移動到另一臺服務器。

現在我已經存儲斯洛文尼亞文本到MySQL一段時間,這對我來說是什麼在起作用:

  • 在連接後做的第一件事應該是發出「SET NAMES utf8」查詢
  • 確保你要存儲的字符串是UTF-8:如果你是從網頁表單中取出它們,請確保頁面是UTF-8
  • 要小心你用什麼工具瀏覽/編輯數據庫內容在線:PhpMysqlAdmin絕對不安全。

希望這有助於。

+0

你能否更精確些?我不知道我應該把這個查詢放在哪裏?我是否將每個查詢都放入數據庫?我看到SET NAMES utf8替換了3個變量(character_set_client,character_set_results,character_set_connection),但我不清楚放置此查詢的位置。謝謝你的幫助! –

+0

只需將其作爲第一個查詢數據庫的對象 - 即可執行 mysql_connect($ server,$ user,$ password); – djn

+1

糟糕,必須按錯了按鈕。我試圖寫的是: mysql_connect($ server,$ user,$ password); mysql_select_db($ dbname); mysql_query(「SET NAMES utf8」); //第一個查詢... 這樣做會使您的連接成爲服務器/客戶端無關的。自從我開始這樣做以後,我可以通過MySQl遷移工具包將數據庫從Windows開發服務器安全地移動到Linux生產環境中,或者直接使用HeidiSQL和SSH隧道複製db-to-db - 所有這些都與任何charset不匹配有關。 – djn

3

您似乎試圖在數據庫中存儲HTML編碼的字符串。不要這樣做,它只會破壞你的字符串操作的能力,比如可靠地搜索。您應該能夠將原始的UTF-8編碼字符作爲字節存儲在數據庫中。

您不會說您使用什麼環境讀取數據庫,或者如何獲取底部的「錯誤」字符串(即使用ISO-8859-1編碼讀取UTF-8字節)。如果它們出現在你的網頁中(並且你在頭文件和/或<meta>標籤中指定了UTF-8),那麼你大概就是在那裏。