【发布时间】:2016-01-15 20:37:27
【问题描述】:
这是我长期以来一直在努力解决的问题。我真的希望有人可以帮助我。
我有一个 PHP 程序从 IMAP 邮箱读取电子邮件。在使用 PHP IMAP 函数一段时间后,我设法在变量中获取电子邮件的纯文本内容。
当我在日志文件中对此变量执行 var_dump 时,我得到了一些很好且可读的东西。
但是,当我尝试将此变量的值保存到我的 MySQL 数据库时,它有时会失败,具体取决于原始电子邮件的编码。
我说这是由于编码,因为它经常在第一个“特殊字符”处失败。因此,仅显示电子邮件的一部分。
有什么方法可以“清理”该变量的值以在我的 MySQL 数据库中使用?我的 MySQL 数据库的排序规则当前设置为 utf8_unicode_ci。
这是我到现在一直在使用的解码功能:
static function decode_text($text, $encoding)
{
//return quoted_printable_decode($text);
switch ( $encoding ) {
# 7BIT
case 0:
return imap_utf7_decode($text);
# 8BIT
case 1:
return imap_utf8($text);
# BINARY
case 2:
return imap_binary($text);
# BASE64
case 3:
return imap_base64($text);
# QUOTED-PRINTABLE
case 4:
return imap_qprint($text);
# OTHER
case 5:
return $text;
# UNKNOWN
default:
return $text;
}
}
感谢您的帮助!
【问题讨论】:
-
如果您将 imap 电子邮件存储在 mysql 数据库中,则不需要。
-
做得好,PHP+MySQL 永远不需要像你的函数那样解码。所以我会假设 Imap 是问题所在。请提供样本的编码和所需解码(均以十六进制格式)。
标签: php mysql email encoding imap