ホームページ  >  記事  >  バックエンド開発  >  PHP のメール機能で UTF-8 でエンコードされた中国語メールを送信するときにタイトルが文字化けする場合はどうすればよいですか?

PHP のメール機能で UTF-8 でエンコードされた中国語メールを送信するときにタイトルが文字化けする場合はどうすればよいですか?

coldplay.xixi
coldplay.xixiオリジナル
2020-07-27 09:16:072233ブラウズ

php のメール関数が UTF-8 でエンコードされた中国語メールを送信するときにタイトルが文字化けする問題の解決策: 1. 件名のテキストを RFC 2047 の仕様に準拠させる; 2. [content-type] を追加するヘッダー; 3.、電子メールの送信に使用されるホストを正しく構成します。

PHP のメール機能で UTF-8 でエンコードされた中国語メールを送信するときにタイトルが文字化けする場合はどうすればよいですか?

#UTF-8 でエンコードされた中国語メールを送信するときにメール関数のタイトルが文字化けする問題の解決策:

# #1. PEAR の Mail クラスを使用する

PEAR の Mail クラスを使用すると、レターの送信に sendmail または SMTP の使用を選択できます。このようなパッケージ化されたインターフェイスは使いやすく、再発明する必要はありません自分自身のホイール。

2. ヘッダーの件名の文字化けについて

iso-8859-1コード以外の文字列は入れないでください。件名に直接入力する場合、正しい方法は、件名のテキストを RFC 2047 の仕様に準拠させることです。件名のテキストのエンコーディングが GB2312 であると仮定すると、正しい件名はこの形式でなければなりません

$headers['subject'] = '=?GB2312?B?' . base64_encode('标题文字') . '?=';

UTF-8 の場合は、先頭の GB2312 を UTF-8 に置き換えるだけです。 MTA の差別化は非常に重要であるため、タイトルでは GB2312 エンコーディングを使用することをお勧めします。ほとんどの MSP は自社開発の MTA を使用しており、国内のほとんどの MTA は GB2312 エンコーディングをサポートできると思います。

外部 MSP に送信する場合は、GB2312 エンコードをサポートしていない可能性があるため、件名に Base64 でエンコードされた UTF-8 テキストを使用することをお勧めします。

3. ヘッダーに必ず content-type を追加してください

電子メールのヘッダーの

content-type は次のようになります。 Web ページの text/plain; charset=gb2312 この形式でもあります。このオプションは主に電子メールを受信するクライアントにとって重要です。クライアントでの文字化けを回避できます。一部の Web メールでは、ここでの設定に基づいて電子メールの内容をエンコードおよび変換して、正しく表示することもあります。 gb2312 エンコードを使用してメール アドレス .com.tw に送信すると何が起こるか想像できます。

4. 電子メールの送信に使用するホストを正しく設定する

1) ほとんどの非固定 IP は逆にできないため、必ず逆解決を設定してください。 、一部のスパム対策ポリシーでは、これを判断基準として使用します。

2) 上記と同じ理由で、必ず MX 解析を設定してください。

3) リターンパスがバウンスメールを受信できることを確認してください。そうしないと、メール送信サーバーが受信側のブラックリストに登録される可能性があります。

$subject = stripslashes($the_post['Title']); 
$headers = "MIME-Version: 1.0\r\n"; 
$headers .= "Content-type: text/plain; charset=utf-8\r\n"; 
$headers .= "Content-Transfer-Encoding: 8bit\r\n"; 
$message = stripslashes(strip_tags($the_post['Content'])); 
mail($to, $subject, $message, $headers);

最初に関数を使用します

base64_encode()—MIME Base64 を使用してデータをエンコードします

タイトル文字列の前にエンコード タイプを追加します。例:

= ?UTF-8 ?B?

タイトル文字列の後に追加します:

?=

例:

<?php  
 $to = "clairelume@qq.com"; //将此电子邮件地址改为自己的。  
 $name = $_POST[&#39;name&#39;];  
 $email = $_POST[&#39;email&#39;];  
 $subject = "来自博客读者的邮件";  
 $subject = "=?UTF-8?B?".base64_encode($subject)."?=";  
 $headers = "MIME-Version: 1.0\r\n";  
 $headers .= "Content-type: text/plain; charset=utf-8\r\n";  
 $headers .= "Content-Transfer-Encoding: 8bit\r\n";  
 $message = $_POST[&#39;message&#39;];  
 mail($to,$subject,$message,"From: ".$email."",$headers);  
 echo &#39;OK &#39;.$name.&#39;, 您的邮件已发送。&#39;;  
?>

このように、送られてきた中国語メールのタイトルが文字化けしています。

関連する学習の推奨事項:

PHP プログラミングの入門から熟練度まで

以上がPHP のメール機能で UTF-8 でエンコードされた中国語メールを送信するときにタイトルが文字化けする場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。