PHP imap奇怪的编码字符

PHP imap奇怪的编码字符,php,encoding,character-encoding,gmail,imap,Php,Encoding,Character Encoding,Gmail,Imap,我正在使用PHP获取我的gmail电子邮件。它给我的电子邮件标题如下: =?ISO-8859-13?Q?Darba_s=E2k=F0ana_ar_Gmail?= 它实际上应该是这样的(这些是通常在utf8中可用的拉脱维亚字符): 我试过: utf8_encode(quoted_printable_decode( "=?ISO-8859-13?Q?Darba_s=E2k=F0ana_ar_Gmail?=" )); 它给了我以下不正确的信息: =?ISO-8859-13?Q?Darba_

我正在使用PHP获取我的gmail电子邮件。它给我的电子邮件标题如下:

=?ISO-8859-13?Q?Darba_s=E2k=F0ana_ar_Gmail?= 
它实际上应该是这样的(这些是通常在utf8中可用的拉脱维亚字符):

我试过:

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

您必须使用以下功能:

$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($element->charset, 'utf-8', $element->text);

正如Piotr所回答的,您需要使用imap\u mim\u头\u解码。我假设您正在使用带有fromaddress的imap_headerinfo。这就是我所做的:

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;
}
if(strpos($header->fromaddress,“?=”){
$Error\u charset=imap\u mime\u header\u decode($header->fromaddress);
$corrected_charset='';
对于($i=0;$ifromaddress;
}
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;
}