[php]
<?php
  function decode_mime($string){
  $pos = strpos($string,'=?'); //
  if(!is_int($pos)){
   return $string;
  }
  $preceding = substr($string, 0, $pos);
  $search = substr($string, $pos+2);   //位置移动2
  $d1 = strpos($search, '?');
  if(!is_int($d1)) {
   return $string;
  }
  $charset = substr($string, $pos+2, $d1);  //取出字符集的定义部分
  $search = substr($search, $d1+1);  //字符集定义以后的部分=>$search;
  $d2 = strpos($search, '?');
  if(!is_int($d2)) {
   return $string;
  }
  $encoding = substr($search, 0, $d2);  //两个 ?之间的部分编码方式: q 或 b
  $search = substr($search, $d2+1);   //后面的所有数据
  $end = strpos($search, '?=');  //$d2+1 与 $end之间是 编码 了的 内容
  if(!is_int($end)) {
   return $string;
  }
  $encoded_text = substr($search, 0, $end);
  $rest = substr($string, (strlen($preceding . $charset . $encoding .$encoded_text)+6));
  switch ($encoding){
   case 'Q':
   case 'q':
    $decoded = quoted_printable_decode($encoded_text);
    if(strtolower($charset) == 'windows-1251') {
    $decoded = convert_cyr_string($decoded, 'w', 'k');
    }
    break;
   case 'B';
   case 'b';
    $decoded = base64_decode($encoded_text);
    if (strtolower($charset) == 'windows-1251') {
     $decoded = convert_cyr_string($decoded, 'w', 'k');
    }
    break;
   default:
    $decode = '=?' . $charset . '?' . $encoding . '?' .$encoded_text .'?==';
    break;
  }
  //return $preceding . $decoded . $this->decode_mime($rest);
  return $preceding . $decoded .decode_mime($rest);
}
$str = "=?gb2312?B?M0XnkIblv7XlnKjolqrotYTnu5Pmng==?= =?gb2312?B?hOiuvuiuoeS4reeahOWGs+etluS9nOeU?= =?gb2312?B?LmRvYw==?=";
$str = trim($str);
//echo $str;
echo "<br>";
echo decode_mime($str)
?>[/php]问下这个程序怎么解决乱码问题
实际应该显示:  3E理念在薪资结构设计中的决策作用.doc
但是却显示了:3E理念在薪资结枠?设计中的决策作甠.doc
问下应该怎么样解决

解决方案 »

  1.   

    不知道你那串东西怎样得来的 = =
    $str = "=?gb2312?B?M0XnkIblv7XlnKjolqrotYTnu5Pmng==?==?gb2312?B?hOiuvuiuoeS4reeahOWGs+etluS9nOeUqN?==?gb2312?B?LmRvYw==?=";
      

  2.   

    是我从eml上弄下来的
    不会有错
    QQ邮箱能解析出来可能是我的方法哪有不足吧请高人指点
      

  3.   

    PHP 本身有扩展可以做... IMAPp.s 你那串东西应该是少了点东西$str = "=?gb2312?B?M0XnkIblv7XlnKjolqrotYTnu5Pmng==?==?gb2312?B?hOiuvuiuoeS4reeahOWGs+etluS9nOeUqN?==?gb2312?B?LmRvYw==?=";
    foreach (imap_mime_header_decode($str) as $item) {
    echo $item->text;
    }