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

时间:2013-10-04 02:50:14

标签: php mysql forms email mojibake

我希望这不是一个特定的问题......任何想法都会受到赞赏。

当有人填写我的联系表格(UTF-8编码)时,数据会正确进入MySQL数据库(整个UTF-8编码),并且会向填写表格的人发​​送回复电子邮件(也是UTF-8)编码)。

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

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

我一直无法复制错误,但是知道它发生了,因为我的客户端发送了回复电子邮件的屏幕截图。有没有其他人遇到这个问题?我有点失落。我使用Sendmail软件发送电子邮件。

由于

1 个答案:

答案 0 :(得分:1)

尝试检测是否有日语,如果有,请使用典型的日语编码发送。 对于使用中文字符的所有其他语言 - 甚至可能是俄语等,你都必须这样做。这个东西真的很痛苦。

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";

   }