PHP imap奇怪的编码字符
PHP imap weird encoding characters
我正在使用 PHP 来接收我的 Gmail 电子邮件。它给我的电子邮件标题如下所示:
=?ISO-8859-13?Q?Darba_s=E2k=F0ana_ar_Gmail?=
它实际上应该是这样的(这些是通常在 utf8 中可用的拉脱维亚字符):
Darba sākšana ar Gmail
我试过:
utf8_encode(quoted_printable_decode(
"=?ISO-8859-13?Q?Darba_s=E2k=F0ana_ar_Gmail?="
));
它给了我以下不正确的信息:
=?ISO-8859-13?Q?Darba_sâkðana_ar_Gmail?
我如何得到这个 - Darba sākšana ar Gmail
您必须使用imap_mime_header_decode函数:
$text = "=?ISO-8859-13?Q?Darba_s=E2k=F0ana_ar_Gmail?=";
$elements = imap_mime_header_decode($text);
foreach ($elements as $element) {
echo "Charset: $element->charset\n";
echo "Text: $element->text\n\n";
}
并且可以使用iconv函数进行转换:
iconv($element->charset, 'utf-8', $element->text);
正如 Piotr 所回答的,您需要使用 imap_mim_header_decode。我假设您将 imap_headerinfo 与 fromaddress 一起使用。这就是我所做的:
if (strpos($header->fromaddress,'?=')) {
$wrong_charset = imap_mime_header_decode($header->fromaddress);
$corrected_charset = '';
for ($i=0; $i<count($value); $i++) {
$corrected_charset .= "{$wrong_charset[$i]->text} ";
}
}
else{
$corrected_charset = $header->fromaddress;
}
我正在使用 PHP 来接收我的 Gmail 电子邮件。它给我的电子邮件标题如下所示:
=?ISO-8859-13?Q?Darba_s=E2k=F0ana_ar_Gmail?=
它实际上应该是这样的(这些是通常在 utf8 中可用的拉脱维亚字符):
Darba sākšana ar Gmail
我试过:
utf8_encode(quoted_printable_decode(
"=?ISO-8859-13?Q?Darba_s=E2k=F0ana_ar_Gmail?="
));
它给了我以下不正确的信息:
=?ISO-8859-13?Q?Darba_sâkðana_ar_Gmail?
我如何得到这个 - Darba sākšana ar Gmail
您必须使用imap_mime_header_decode函数:
$text = "=?ISO-8859-13?Q?Darba_s=E2k=F0ana_ar_Gmail?=";
$elements = imap_mime_header_decode($text);
foreach ($elements as $element) {
echo "Charset: $element->charset\n";
echo "Text: $element->text\n\n";
}
并且可以使用iconv函数进行转换:
iconv($element->charset, 'utf-8', $element->text);
正如 Piotr 所回答的,您需要使用 imap_mim_header_decode。我假设您将 imap_headerinfo 与 fromaddress 一起使用。这就是我所做的:
if (strpos($header->fromaddress,'?=')) {
$wrong_charset = imap_mime_header_decode($header->fromaddress);
$corrected_charset = '';
for ($i=0; $i<count($value); $i++) {
$corrected_charset .= "{$wrong_charset[$i]->text} ";
}
}
else{
$corrected_charset = $header->fromaddress;
}