2012-04-07 117 views
1

我遇到了瑞典語字符(與英語字母表不同)的問題,以及它們如何插入到數據庫中。將字符發送到數據庫時發生字符問題

我使用osCommerce,iso-8859-1在管理員和編目頁面都設置爲字符集。如果我運行SHOW VARIABLES;,則數據庫中的character_setlatin1

而且繼承人從的phpinfo一些服務器設置:

iconv.input_encoding ISO-8859-1 

iconv.internal_encoding ISO-8859-1 

iconv.output_encoding ISO-8859-1 

根據主機支持頁面的Apache提供在UTF-8因爲默認情況下所有的頁面,它可以改變通過在加入

AddDefaultCharset ISO-8859-1 

.htaccess文件。

當我去管理員更新產品在不同的輸入字段中的所有字符ar從數據庫中傳遞出來,並顯示爲他們認爲。但是,當我更新產品的所有特殊字符被轉換這樣的:

  • A成爲A¥
  • A成爲澶
  • ö成爲ö

同樣的情況,如果我添加一種新產品。

當我用phpmyadmin查看數據庫時會顯示「損壞」字符,所以它不僅僅是翻譯錯誤的網頁。

我的主機最近annoncet說他們會爲php做一些更新,所以我認爲它與這個更新有關。這一切在幾天前都運行良好。

我不知道我的previos PHP版本,但現在我有5.2.17和MySQL 4.0.27是標準

有人能幫助我在這件事情,並告訴我什麼,我需要做的。

有沒有簡單的解決方案,我需要將數據庫和網頁轉換爲UTF-8還是需要做其他事情?

回答

1

聽起來網頁瀏覽器發送的格式是UTF-8而不是ISO-8859-1。在寫入數據庫之前,應用程序(或MySQL客戶端)將文本轉換爲UTF-8。您可以通過執行簡單的echo bin2hex($text);來檢查$text的編碼方式。

如果問題出在瀏覽器上,請在表單標籤中設置用於發送表單的字符編碼屬性accept-charset。那就是:

<form action="..." method="POST" accept-charset="ISO-8859-1"> 
    .... 
</form> 
+0

感謝您的回覆。如果沒有人做任何事情,問題就會消失。所以這都是詭計。 但我發現你的答案很有趣,如果再次出現這個問題,我會盡力確認。 – 2012-04-19 09:49:52

+0

我想它可能很難重現,因爲問題可能高度取決於瀏覽器版本和修補級別 – Joni 2012-04-19 10:02:31