2016-02-02 34 views
1

我有一張表,我存儲一些文本標籤。最初它是使用latin_swedish_ci(默認)排序規則構建的。俄語,葡萄牙語等錯誤的編碼文本

現在我需要支持其他語言,如俄語。我需要使用這兩個標籤的兩個頁面。一個顯示他們很好,儘管該表仍然使用拉丁整理,而不是utf8_generic_ci,但其他頁面仍顯示垃圾。當我查看源代碼,它看起來像這樣:

\ u00d0 \ u00a4 \ u00d0 \ u00b8 \ u00d0 \ u00bb \ u00d1 \ u0152 \ u00d1 \ u201a \ u00d1 \ u20ac \

兩個頁面有:

<META http-equiv="Content-type" content="text/html;charset=UTF-8"> 

我錯過了什麼?


UPDATE:

我不知道爲什麼,它是如何工作的,但我最終行動加入我的查詢插入/更新前,顯示在網頁上之前以下,並修復了所有我問題:

mysql_query("SET NAMES utf8"); 

如果你也浪費了足夠的時間嘗試元標記和標題,請給這個解決方案一個旋風。

+0

你需要設置PHP,HTML,數據庫/表和連接對象的字符集爲相同的東西,在你的情況UTF-8。爲了避免破碎的字符,*所有*都需要是相同的字符集。 – Qirel

+0

我的意見(我真的不知道俄羅斯)的演示鏈接(http://www.usabilitest.com/uxXQAzq)顯示正確。而且,如果我沒有記錯的話,你的情況就是葡萄牙人和俄羅斯人都應該得到支持。在這種情況下,UTF-8中的所有東西都是最好的。 – hherger

+0

順便說一句,此鏈接可能會有所幫助:http://stackoverflow.com/questions/12756877/how-to-convert-latin1-swedish-ci-data-into-utf8-general-ci – hherger

回答

0

不是使用mysql_*接口;切換到mysqli_*

你可能想要類似Фил...

有可能是兩個錯誤,得到這個爛攤子。

meta標籤不錯;需要SET NAMES utf8

但可能你已經在表中存儲垃圾。所以,讓我們看一下表格:SELECT col, hex(col) FROM tbl...

對於Фил,您應該看到D0A4D0B8D0BB的十六進制。如果你看到C390C2A4C390C2B8C390C2BB,你有「雙重編碼」。相反,它似乎以某種方式獲得了「unicode」而不是「utf8」,並且可能來自您開始使用的「latin1」。請注意0​​如何顯示在我的十六進制和\u00d0...

如果可以重新來過,這樣做的:

  • utf8編碼在客戶端
  • SET NAMES utf8
  • CHARACTER SET utf8在列/表
  • <meta charset=UTF-8>

如果不能重新開始,讓我們看看我要求的SELECT; 也許我可以找到一種方法來挽救您的數據。