→
→ (右矢印、または Unicode 2192 hex) を電子メールの件名にエンコードしようとしています。
PHP を使用するmb_encode_mimeheader()
と、Thunderbird や Gmail で同じことを行う場合とは異なる値が得られます。しかし、phpで生成されたメールが届くと、文字が正しく表示されません。また、PHP は PHPmb_decode_mimeheader()
からの出力に対して機能しますが、他の電子メール ソースからのコンテンツをデコードすることはありません。
16進ダンプを介して、矢印のUTF-8表現が
<?php
$rarr = "\xe2\x86\x92";
mb_encode_mimeheader($rarr, 'UTF-8'); // =?UTF-8?B?w6LChsKS?=
// whereas Tbird and Gmail produce: =?UTF-8?B?4oaS?=
// and more manually:
'=?UTF-8?B?' . base64_encode($rarr).'?='; // =?UTF-8?B?4oaS?=
PHP のエンコーディングは、Thunderbird と Gmail では次のようになります。
標準的な結果を生成していないように見えるため、PHP の動作に完全に混乱しています。
PHP で UTF-8 メール ヘッダー値をエンコードして、メール クライアントで適切にデコードされるようにするにはどうすればよいですか?