0

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

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

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

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

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

谢谢

4

1 回答 1

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

   }
于 2014-01-25T01:11:12.253 回答