【问题标题】:PHP imap weird encoding charactersPHP imap 奇怪的编码字符
【发布时间】:2015-02-01 17:50:46
【问题描述】:

我正在使用 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

【问题讨论】:

    标签: php encoding character-encoding gmail imap


    【解决方案1】:

    你必须使用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);
    

    【讨论】:

      【解决方案2】:

      正如 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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多