php - 提交表单时回复电子邮件中的 Mojibake(但不是每次)

标签 php mysql forms email 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";

   }

关于php - 提交表单时回复电子邮件中的 Mojibake(但不是每次),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19172392/

相关文章:

php - 使用PHP查找文件名中包含字符串或模式的目录中的所有文件

php - Sql 2 表 Q?

php - 如何使用 Gmail 凭据作为输入在 php 中获取用户的名字?

Javascript函数在服务器上写入数据

php - 如何使用 Zend_Db_Adapter_Mysqli 启用 MySQL 的严格 sql 模式?

mysql - 使用什么样的查询来获得这个(左连接不起作用)

php - 使用php将数据插入mysql表时遇到问题

php - 使用表单在 MySQL DB 中存储和检索关联数组

Python Mechanize 错误;预期名称 token 位于 '<! -- Additionnal re'

php - 显示所有产品而不是只显示一个