When I send an email containing £ using PHP mail it appears in outlook/hotmail as £. In Gmail/thunderbird it's fine.
Any idea how I can fix this?
問題は、クライアントがサブジェクトをエンコードするために使用されるエンコーディングを知らないことです。アプリケーションがヘッダーに設定する内容は、Content-Type
ヘッダーではなく、メールの本文にのみ適用されます。
通常、これは次のヘッダーに影響します。
異なるエンコーディングを使用するには、base64 (B) または modified quoted-printable (Q) の 2 つの方法のいずれかを使用して、国際化されたヘッダー行を MIME エンコードする必要があります (RFC 2047 以降)。エンコードされた件名は通常、次のようになります。
Subject: =?ISO-8859-1?Q?Pr=FCfung_f=FCr?= Entwerfen von einer MIME kopfzeile
これは難しそうに見えるかもしれませんが、PHP にはすべての魔法を行う非常に便利なヘルパー関数が 1 つあります。
または、以下の議論を調べることもできます:
直接使用する前にquoted_printable_encode()
、長い行を特定の長さで分割する必要があり、スペースをアンダースコア "_" に置き換える必要があることを考慮する必要があります。
ちょうど今日、php の組み込みの代わりにphpmailermail
を使用して、同様の件名エンコーディングの問題を修正しました。
$mail = new PHPMailer(true);
$mail->IsSMTP();
$mail->CharSet = "utf8";
$mail->Subject = $mail->EncodeHeader("You won £10000000!");
....
$retval = $mail->Send();
通常、私はmb_convert_encoding()
関数を使用します
mb_convert_encoding($string, "UTF-8"); //AUTO DETECT AND CONVERT
mb_convert_encoding($string, "UTF-8", "latin1"); //MANUAL SET - CHANGE latin1 TO CURRENT ENCODING
メールで UTF-8 エンコーディングを使用してみてください。