2011-05-11 58 views
3

我有一個表格,西班牙語可以提交和使用PHP,我發送電子郵件的數據。不幸的是,重音標記在通過電子郵件發送時完全搞砸了。西班牙語口音標記在表單提交

如果我提交以下材料:

測試重音符號 á é í ó ú ñ

我結束了我的電子郵件的正文如下。 ..

測試語音標記Ã ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ

正在處理電子郵件的代碼是簡單地將$ _POST信息直接放在電子郵件的正文。我假設我需要htmlentities()或其他東西,但我已經嘗試過,沒有任何工作...

我還需要將相同的數據放入MySQL數據庫並稍後檢索它。當我這樣做時,我需要注意什麼?

謝謝! 德魯

+0

我沒有答案,但你應該看看多字節字符串和PHP – 2011-05-11 12:49:10

+1

似乎是一個編碼問題...確保表單和電子郵件具有相同的編碼。你用什麼來發送電子郵件?如果您使用MySQL,請確保您存儲這些文本的表格也具有相同的編碼。 – roirodriguez 2011-05-11 12:49:42

回答

3

你已經觸及了charsets的精美主題。嘗試創建並將所有內容轉換爲utf-8。數據庫,文件,表格等。在互聯網上查找一些關於電子郵件中使用什麼標題的信息,以使它成爲utf-8。還可以使用這些標題將電子郵件從標準7位轉換爲8位。

"Content-Type: text/plain; charset=utf-8" 
"Content-Transfer-Encoding: 8bit" 

對於你需要設置的數據庫,如果是mysql,那麼排序規則。

+0

我認爲這是問題所在。我只是沒有意識到我在電子郵件中設置了錯誤的字符集。謝謝您的幫助! – 2011-05-11 13:01:35

+1

不合作,但整理... – roirodriguez 2011-05-11 13:03:20

+0

我已經得到了電子郵件工作很好,現在試圖讓數據庫工作。我的排序規則設置爲utf8_unicode_ci,但我仍然收到錯誤的字符......想法? – 2011-05-11 13:11:05

0

如果您使用UTF8科目,你需要Base64編碼,他們爲這樣的第一:

$subject = "=?utf-8?b?".base64_encode($subject)."?="; 

並設置內容類型,例如:

$headers.="Content-Type: text/html; charset=utf-8\r\n"; 

我也建議你使用像SwiftMailer這樣的系統來防止標頭注入攻擊。對於數據庫部分,我相信作爲一個單獨的問題來獲得適當的標籤和更有針對性的響應會更好。

0

您的腳本正在接收以UTF-8編碼的數據,但您的電子郵件客戶端認爲該電子郵件使用Latin-1編碼。有兩種方法可以解決這個問題:在電子郵件中添加一個標題,指示字符編碼爲UTF-8,或在提交的內容上使用utf8_decode()(如果您確定只使用Latin-1字符)。

1

要回答你的問題有關數據庫中存儲數據:

你已經打開使用的mysql_connect(到MySQL連接後),請發送以下查詢作爲你的第一個命令:

mysql_query("SET NAMES utf8"); 

(或mysqli_query(),取決於你使用的庫)。

此命令可以讓MySQL數據庫知道:

  • 你會提供所有數據將被 編碼爲UTF-8,和
  • 你也想接收UTF-8的一切。

嚴格地說,數據庫本身可以在任何整理和編碼(MySQL是幸福的轉碼的東西你上飛),當然,最好有在UTF-8的數據庫也是如此。

+0

修復它...對不起我不能將你的標記作爲正確的答案...... – 2011-05-11 15:35:50