2013-04-20 59 views
5

當我使用phpmyadmin查看存儲在mysql數據庫中的數據時,字符完全按照éàç存儲,但是當我使用php在具有以下精確結構的html文檔上顯示這些數據時:UTF-8法語重音字符問題

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title></title> 
</head> 

<body> 
</body> 
</html> 

我有方形的,而不是語音字符,但是,我沒有這個問題有沒有被在同一個頁面從MySQL裝上靜態內容的任何重音字符。

當我看到他們似乎是相同的頁面的源代碼!例如:MySQL的源數據的

éçà 

部分:

éçà 

我試圖與

替換

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

顯示爲對源代碼的靜態數據的

部分

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

並因此我得到了一個固定的MySQL,靜態與正方形!

任何提示?

+1

看起來像一個錯誤配置問題。也許你的數據庫驅動程序不使用UTF-8? 當您更改爲'windows-1552'並且靜態文件不顯示時,來自數據庫的數據顯示OK,這可能意味着您的源文件以UTF-8格式(正確),但數據庫中的數據以錯誤的編碼格式到達。 無論發生什麼,堅持UTF-8。 – ubik 2013-04-20 17:20:57

+0

謝謝您的回覆,我已經檢查了數據庫,發現排序規則設置爲'latin1_swedish_ci',這可能是問題的根源嗎? – Mbarry 2013-04-20 17:24:34

+1

是的,這是問題的根源,你存儲你的數據在MySQL ascii中,但然後試圖顯示它在utf8在你的html .. – Nelson 2013-04-20 17:26:32

回答

5

這是很常見的字符集問題,您需要手動設置連接編碼爲MySQL連接(你建立連接後執行這些應該是先查詢):

SET NAMES utf8; 
SET CHARACTER SET utf8; 

,並且確保每個表都有CHARACTER SET集到UTF-8。您可以更新server configuration

+0

使用'SET NAMES utf8;'固定,按照建議執行。謝謝! – Mbarry 2013-04-20 17:38:49

+0

有關如何在服務器端自動執行此操作的說明,請參閱http://stackoverflow.com/questions/3513773/change-mysql-default-character-set-to-utf8-in-my-cnf。 – ubik 2013-04-21 11:32:50

2

看起來像一個錯誤配置問題。很可能您的數據庫或驅動程序不使用UTF-8。

當您更改爲windows-1552且靜態文件不顯示時,來自數據庫的數據顯示OK,這可能意味着您的源文件以UTF-8格式(正確),但數據庫中的數據正在到達以錯誤的編碼格式。

無論發生什麼事,堅持使用UTF-8。

UPDATE:沒有解釋如何自動設置編碼的連接線程:

Change MySQL default character set to UTF-8 in my.cnf?

+0

謝謝佩德羅,問題已經解決,我不會堅持windows-1552。 那裏有一個術語窗戶有問題大聲笑。謝謝 – Mbarry 2013-04-20 17:40:07