提交表单时在回复电子邮件(但不是每次)中输入 Mojibake


Mojibake in reply email (but not every time) when a form is submitted

我希望这不是一个太具体的问题......任何想法都值得赞赏。

当有人填写我的联系表格(UTF-8编码

(时,数据会正确进入MySQL数据库(全程UTF-8编码(,并向填写表格的人发送回复电子邮件(也是UTF-8编码(。

如果数据是用英文输入的,一切都很好。如果数据以日语输入,则字符在数据库中正确呈现,回复电子邮件(从数据库中获取其姓氏和名字,也完全用日语书写(也会正确呈现。 都很好,对吧?

但有时,回复电子邮件会将字符呈现为 Mojibake,即使发送到通常正确呈现汉字字符的地址也是如此。

我无法复制该错误,但知道它已经发生,因为我的客户已发送了回复电子邮件的屏幕截图。 还有其他人遇到过这个问题吗? 我有点不知所措。 我使用Sendmail软件发送电子邮件。

谢谢

尝试检测它是否具有日语,如果是,则使用典型的日语编码发送。您必须对所有其他使用汉字的语言执行此操作 - 甚至可能是俄语等。这东西真的很痛苦。

function isKanji($str) {
     return preg_match('/['x{4E00}-'x{9FBF}]/u', $str) > 0;
}
function isHiragana($str) {
    return preg_match('/['x{3040}-'x{309F}]/u', $str) > 0;
}
function isKatakana($str) {
    return preg_match('/['x{30A0}-'x{30FF}]/u', $str) > 0;
}
function isJapanese($str) {
    return $this->isKanji($str) || $this->isHiragana($str) || $this->isKatakana($str);
}
$userinputtext = "日本語を認識したいです!";
if (isJapanese($userinputtext)){
   mb_language("ja");
   $subject = mb_encode_mimeheader($subject,"ISO-2022-JP-MS");
   $body = mb_convert_encoding($body,"ISO-2022-JP-MS");
   $mail->CharSet = 'ISO-2022-JP';
   $mail->Encoding = "7bit";
   }