2011-06-17 122 views
4

我已將我的網站發佈到服務器,但由於字符問題我正在撕掉我的頭髮。儘管我的任何愚蠢(不清楚或不匹配的字符集),但本地它一切正常。讓我們舉一個表作爲例子,因爲它滿足了我們的條件:發佈PHP + MySQL網站時出現字符集問題

我的本地方案

  • PHP 5.3.0
  • 的Apache 2.2.11
  • 的MySQL 5.1.36社區日誌
    • 連接:utf8_general_ci
    • 數據庫:latin1_general_ci
    • 表:latin1_general_ci
  • 谷歌Chrome瀏覽v 12.0.742.100 W /字符集ISO-8859-1
  • PHP頁面字符集設置爲:<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  • 地方:注意單詞 「本草」 - 來從HTML - 和 「Notícia」 - 來自數據庫 - 都能夠正確顯示的口音:

expected behaviour locally

我的主場景

  • PHP 5.3.6
  • 運行IIS的FastCGI
  • MYSQL 5.5.13
    • 連接:utf8_general_ci
    • 數據庫:latin1_general_ci
    • 表:latin1_general_ci
  • 谷歌Chrome瀏覽v 12.0.742.100 W /字符集ISO-8859-1
  • PHP頁面字符集設置爲:<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  • 主持人:注意如何 「Notícia」 有脫穎而出的麻煩:

wrong behaviour on host

我讀過一些東西,包括這個very good article爲開發人員建立了一個共同點。

我已經考慮

  • 問題是在表中的實際數據(儘管具有latin1_general_ci覈對也許實際存儲數據不同地this mate states it它);
  • 與IIS有一些討厭的關係的問題(當一個運行在IIS下的PHP經常有非IIS傾向);
  • 我innacurate編程技能再次對我玩花招

人提供一些幫助?我可以提供一些巴西葡萄牙語課程,一些關於精神生活的建議或者只是一些關於任何事情的聊天,但是我必須解決這個問題,你可以幫我。

在此先感謝,

+0

數據來自MySQL?你是如何去傳輸數據庫的? – datasage

+0

只有按鈕「A Gazeta」, 「Tribuna」和「NotíciaAgora」正在上演來自mySQL。爲了傳輸,我導出了表結構和數據,複製SQL語句並在主機數據庫中執行它們,全部使用phpMyAdmin。 – marquito

+1

我不會推薦使用除UTF8以外的任何內容來進行整理/編碼。將utf8_general_ci設置爲你的數據庫,並確保所有表/列具有相同的排序規則。在你的html head標籤中使用UTF8。你已經列出你的連接,html和db有不同的編碼。它似乎在你的機器上工作,但不能保證它會在其他地方飛行。 –

回答

1

如果您使用ISO字符集,那麼您必須確保您的文本以與將要顯示的字符集相同的字符集進行存儲。

這是您的問題所在。

問題是因爲charset已經保存了嗎?這是而不是受您的數據庫設置影響。與常見觀點相反,您的數據庫僅使用字符集進行整理。但它只是按原樣保存比特序列。

將網站加載到瀏覽器中,然後強制瀏覽器使用ISO-1並查看它是否正確顯示。如果是,則將其存儲爲ISO-1,如果不是其他內容。

事情是:

  • 有了妥善安置<元HTTP的當量=「...有限公司在代碼的開頭,你幾乎總是可以讓瀏覽器使用此charset
  • 但如果。有些瀏覽器使用啓發式來猜測字符集
+0

Raffael ...原來數據庫數據是以UTF-8格式存儲的,因此我必須通過每個.php文件並將其編碼轉換爲UTF-8,並將文件重新保存爲UTF-8(使用BOM技術上UTF-8沒有什麼區別,只是聲明它爲UTF-8)。我們寧願改變php文件而不改變數據庫數據本身,這將是一個痛苦(可能**錯誤**)。乾杯。 – marquito

+0

和無論如何,一路走UTF8,你不會有任何問題...甚至沒有PHP5.2 – Raffael

0

我ugraded的mysql我的本地Fedora的Linux機器上從5.1到5.5,並與我的字符集問題。我發現升級只是通過安裝軟件才完成。升級後我必須按照instructions from the MySQL manual的規定修復一些問題。該文件有許多步驟可以很好地解決這個問題。雖然你不應該直接跳到它 - 運行mysql_upgrade是一個很大的幫助。