Это проблема, с которой я боролся долгое время. Я действительно надеюсь, что кто-то может мне помочь.PHP-адрес электронной почты IMAP и кодировка MySQL
У меня есть программа 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, вам не нужно. – e4c5
Правильно сделано, PHP + MySQL никогда не нуждается в декодировании, как в вашей функции. Поэтому я предполагаю, что проблема Imap. Укажите кодировку и требуемое декодирование - как в шестнадцатеричном виде, так и в образце. –