2011-11-23 94 views
0

那麼... Html頁面和mysql表格包含西里爾語文本。 爲了顯示西里爾文字Барысаў2000我用html頁面顯示西里爾文符號好的,如果包含charset = windows-1251,但不是utf-8

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> 

的網頁上。 用於在MySQL表中存儲該字,utf8_unicode_ci使用排序規則(我已經閱讀了一些主題,據我所知,推薦使用utf8_unicode_ci來存儲西里爾字符)。 但是,我實際上看到使用phpMyAdmin,文本Барысаў2000在數據庫中存儲爲Áàðûñà¢2000,這就是我想解決的問題。 (POST方法+轉義危險符號用於將用戶的文本保存到數據庫中)。 但是,當您選擇該數據並將其顯示在html頁面上時,它看起來很好:Барысаў2000。

問題如何phpMyAdmin顯示它爲我沒有打擾我,直到今天。今天我試圖解決它。

我猜我必須使用UTF-8無處不在,所以我從

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> 

切換到

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 

現在我的網頁顯示的問題,而不是西里爾符號,並與displayng西里爾文字的問題在我的分貝沒有解決。 誰能告訴我有什麼問題? P.S.我可以毫無問題地閱讀塞爾維亞語和白俄羅斯語(西里爾語言)網站,並且可以在我的本地主機上鍵入西里爾語文本。

謝謝。

+0

你必須在任何地方使用utf-8 - db表格整理,html charset。我通常使用utf8_general_ci而不是utf8_unicode_ci。 以防萬一你可能指定mysqli_set_charset($ connection,'utf8');設置連接變量後 - http://php.net/manual/en/mysqli.set-charset.php。 你很明顯從一開始就有錯,你的數據庫中的數據編碼不正確,因此它不會正確顯示在頁面上。還要確保你的php文件保存爲「沒有BOM的UTF-8」 –

回答

2

phpMyAdmin的問題可能是由不正確的字符編碼猜測引起的。如果您使用字符集windows 1251對文本Барысаў2000進行編碼,則最終會產生一個字節流C1 E0 F0 FB F1 E0 A2 32 30 30 30 0D 0A。如果該字節流被解釋爲使用ISO-8859-1或windows-1252編碼的文本,則結果顯示爲Áàðûñà¢2000

這表明數據庫中的字符串實際上是存儲在windows-1251編碼中的。然後,如果輸出這些字符串,並且只聲稱它使用UTF-8編碼(不進行任何重新編碼),則結果將是垃圾文本,因爲該字節流包含無效的UTF-8字節序列。

您應該繼續使用windows-1251字符集提供頁面服務,並告訴phpMyAdmin也使用此字符集,或者您應該切換到任意位置的unicode(也在數據庫內部)。較少的字符轉換和猜測所需的正確編碼,維護系統就會變得更容易。

+0

謝謝你的想法。我仍在考慮這個問題,但無法解決問題。對我而言,即使我在html頁面中設置了UTF-8,即使db中的每個文本字段都使用utf8_unicode_ci,並且即使我不顯示來自頁面上的數據庫的文本,但也可以添加一些CYRILLIC文本在頁面上(所以我排除了phpMyAdmin的一個可能的錯誤解釋),甚至西里爾文符號從db中刪除,然後英文文本和數字在html頁面上都可以,但西里爾語文本甚至不是Áàðûñà¢2000,但是?????? ?2000。儘管FF或IE中的任何西里爾語網站看起來都很好。 – Haradzieniec

+0

@Haradzieniec嘗試切換瀏覽器的字符編碼,並告訴哪個字符集似乎工作。然後你會知道什麼編碼你的HTML文件*真正*使用。請注意,如果在HTTP標頭中定義了編碼,則可以忽略「」元素。此外,如果您從多個輸入源生成HTML頁面,結果可能最終會使用多個編碼(這當然是一個問題)。 – jasso

+0

這是一個很奇怪的現象...我開始簡化代碼......現在...在一個文件中同樣的西里爾9個符號單詞是17個字節(在html頁面上是矩形),在另一個文件中是7個字節。這兩個文件都顯示9個西裏爾字母,並且在記事本中看起來相同。記事本顯示相同的1個字,沒有空格,沒有新行。可能嗎?據我瞭解,由於安全原因,我無法在論壇上附加文件。自動檢測編碼表示它是Widnows(西里爾文),只有當它是Windows(西里爾文)時才顯示,但不顯示utf-8。什麼是地獄...... – Haradzieniec

相關問題