2

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?

4

5 に答える 5

3

問題は、クライアントがサブジェクトをエンコードするために使用されるエンコーディングを知らないことです。アプリケーションがヘッダーに設定する内容は、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()、長い行を特定の長さで分割する必要があり、スペースをアンダースコア "_" に置き換える必要があることを考慮する必要があります。

于 2012-04-16T22:33:57.140 に答える
2

ちょうど今日、php の組み込みの代わりにphpmailermailを使用して、同様の件名エンコーディングの問題を修正しました。

$mail = new PHPMailer(true);
$mail->IsSMTP();
$mail->CharSet = "utf8";
$mail->Subject = $mail->EncodeHeader("You won £10000000!");
....
$retval = $mail->Send();
于 2012-04-16T21:53:17.527 に答える
1

通常、私は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
于 2012-04-16T22:05:04.793 に答える
0

メールで UTF-8 エンコーディングを使用してみてください。

于 2012-04-16T21:53:47.977 に答える