安全でないユーザー入力を含む可能性のあるコードで HTML メールを送信しようとしています。件名を html エスケープすると、GMail はエスケープされたコンテンツを表示することに気付きました (件名が である場合"This & That"
、これを としてサニタイズすると"This & That"
、Gmail は後者を表示します)。サンダーバードも同様です。すべての電子メール クライアントで、件名の html をエスケープする必要はないと考えてよいでしょうか?
3 に答える
件名に HTML エンティティをエンコードする必要はありません。HTML 本文でエンコードする理由は、XHTML を使用している場合です。XHTML は XML から派生しているため&
、予約文字として扱われます。
ただし、電子メールの件名は HTML、XML、または XHTML ではありません。それはただの純粋なテキストです。このため、アンパサンドを としてエンコードする必要はありません&
。エンコードすると、HTML として解析されないため、エンコードされたものとして表示されます。
ASCII 以外の文字 (例: £
) を含めたい場合は、「封筒」全体 (メール本文を含む) を UTF-8 としてエンコードする必要があります。
したがって、コードでは、次のように表示されます。
| Subject Line | Body
====================================
& | & | &
& | & | &
UTF-8 £ | £ | £
ASCII £ | n/a | n/a
£ | £ | £
注: Microsoft Office には UTF-8 の奇妙な実装があるため、すべての UTF-8 文字が機能するとは限りません。
件名は html エスケープする必要はありませんが、エスケープできます。元の SMTP 仕様では、メッセージは ascii である必要があると定義されていました ( RFC822セクション 3)。これは RFC2822 で確認されましたが、RFC2047ではヘッダー拡張が定義されており、MIME メッセージ内のヘッダー フィールドをエンコードして非 ASCII テキストを許可できます。
このエンコードされた単語形式により、メール ヘッダー内で utf-8 などのエンコードを使用できます。例えば:
=?iso-8859-1?q?this=20is=20some=20text?=
これは、"this is some text" の ISO-8859-1 エンコード バージョンです。このメソッドは、シャープ記号 (£) やアクセント付き/非 ASCII 文字などを enode するために使用できます。
件名フィールドは「HTMLコンテンツ」の外にあります。HTMLとは何の関係もありません。
しかし、私はこれについての参照を持っていません...