2012-06-12 29 views
6

我即將發送可能包含不安全用戶輸入的代碼中的HTML電子郵件。我注意到,如果我的HTML逃避了這個問題,GMail就會顯示轉義的內容(所以如果我的主題是"This & That",我將其整理爲"This & That",Gmail會顯示後者)。雷鳥也是如此。假設所有電子郵件客戶端都不需要主題html轉義是否安全?電子郵件主題是否需要html轉義?

回答

5

無需在主題行中對HTML實體進行編碼。在HTML主體中進行編碼的原因是,如果您使用的是XHTML,因爲它源自XML,所以將&視爲保留字符。

但是,電子郵件的主題行不是HTML,XML或XHTML。這只是純文字。因此,您不需要將&符號編碼爲&。如果你編碼它,因爲它不被解析爲HTML,它將顯示爲編碼。

如果您想要包含非ASCII字符(例如£),那麼您需要將整個'信封'(包括電子郵件正文)編碼爲UTF-8。

所以,在代碼中,以下將顯示爲:

 | Subject Line | Body 
==================================== 
& | &  |  &  
&  |  &  |  & 
UTF-8 £ |  £  |  £ 
ASCII £ |  n/a  | n/a 
£ | £ |  £ 

注:微軟辦公室有一個奇怪的實現UTF-8的,所以不是所有的UTF-8字符會工作。

+0

雖然您不需要對主題進行HTML編碼,但一定要對其進行上下文清理:HTTP標頭。刪除換行符如'\ n'和'\ r'! –

2

該主題字段是「HTML內容」的之外。它與HTML沒有任何關係。


不過,我沒有這方面的一個參考...

2

主題的不需要然而HTML逃了出來,他們可以逃脫。原始的SMTP規範定義消息應該是ascii(RFC822第3節)。這在RFC2822中得到了確認,然而,RFC2047定義了頭擴展,允許您對MIME消息中的頭字段進行編碼以允許非ASCII字符文本。

這種編碼字格式允許您在電子郵件標題中使用類似utf-8的編碼。例如:

=?iso-8859-1?q?this=20is=20some=20text?= 

這是「這是一些文本」的ISO-8859-1編碼版本。此方法可用於編碼諸如英鎊符號(£)或重音/非ascii字符之類的東西。