0

最近、UTF-8 エンコーディングを使用するように環境を移行しました。すべてが完璧に機能しているように見えました。ページは UTF-8 で正しく表示され、PHP の mail() 関数で送信された電子メールも (私たちの場合) フランス語の文字が正しく表示されて送信されました。

今朝、非マルチバイト文字列関数 (strlen()、mail() など) を対応するマルチバイト文字列関数 (mb_strlen()、mb_send_mail() など) に置き換え始めました。 mb_send_mail() を除くすべてのケースで、フランス語の文字が疑問符として表示されます。奇妙なことに、mail() を使用すると正しく表示されます。どちらの場合も、メールのヘッダーで文字セットを utf-8 に設定しており、メール クライアントで確認すると、そのように送信されていることが確認されます。

関数のオーバーロード機能を使用していないことを付け加えておきます。これは、使用しているサードパーティの拡張機能に干渉するのではないかと懸念していたためです。そのため、関数を手動で置き換えることにしました。

編集

これらの行は、php.ini で変更/追加されました。

default_charset = "utf-8"
mbstring.language=Neutral
mbstring.internal_encoding=utf-8
mbstring.http_input=UTF-8
mbstring.http_output=UTF-8
mbstring.encoding_translation=On

PHP ファイルもすべて BOM なしの UTF-8 エンコーディングで保存されています。

mb_send_mail() 関数を呼び出すときのコードは次のようになります。

$to = "person@email.com";
$subject = "Assigné";
$body = "La demande suivante vous a été assigné : "
$headers .= 'From: ' . $from . "\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-Type: text/html; charset="utf-8"' . "\r\n";
$headers .= 'Content-Transfer-Encoding: quoted-printable' . "\r\n";

if (!(@mb_send_mail($to, $subject, $body, $headers))) {
//Error message
}

元の投稿で示したように、mb_send_mail() 関数を使用すると、電子メールの件名と bosy を含むすべての e 急性 (é) 文字が疑問符 (?) として表示されますが、mail() 関数を使用すると、それらが表示されます。意図した通り。

4

1 に答える 1

0

mail()私が気付いた限り、それがより良く機能する機能を維持してください。

mb_send_mail()他の人が推奨するPHPマニュアルを参照してください。

于 2012-10-19T22:41:22.817 に答える