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

Php 提交表单时,Mojibake会在回复电子邮件中(但不是每次),php,mysql,forms,email,mojibake,Php,Mysql,Forms,Email,Mojibake,我希望这不是一个太具体的问题。。。任何想法都很感激 当有人填写我的联系人表单(UTF-8编码)时,数据会正确地进入MySQL数据库(UTF-8编码),并向填写表单的人发送一封回复电子邮件(也是UTF-8编码的) 如果数据以英语输入,则一切正常。 如果数据是用日语输入的,则字符在数据库中正确呈现,回复电子邮件(从数据库中获取他们的姓和名,并且完全用日语书写)也正确呈现。很好,对吗 但有时,回复邮件会将字符呈现为Mojibake,即使发送到通常正确呈现汉字的地址 我无法复制错误,但我知道这是因为我的

我希望这不是一个太具体的问题。。。任何想法都很感激

当有人填写我的联系人表单(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";

   }

谢谢你花时间写这篇文章,我一定要试一试。关于字符集,在我的数据库和脚本中保持它的一致性不是最好的做法吗?理想情况下,我希望使用UTF-8渲染所有内容-我可以将IS0-2022-JP更改为UTF-8吗?如果是这样,我是否也会将$mail->编码调整为不同的格式?再次感谢您抽出时间。你说得对,mojibake的问题有点像噩梦,我已经和它合作(反对?)好几年了。