filename="=?gb2312?B?M0XnkIblv7XlnKjolqrotYTnu5Pmng==?=
=?gb2312?B?hOiuvuiuoeS4reeahOWGs+etluS9nOeU?=
=?gb2312?B?LmRvYw==?="谁能把这filename解码出来我佩服他求解码方式我的解码有点乱码请高人帮我想想方法
底下是我的方法
[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);
}
?>[/php]但有乱码
请高人指点

解决方案 »

  1.   

    介绍你来这里转转:http://www.phpzc.com,或许你会有意想不到的收获
      

  2.   


    echo _decodeHeader($filename);
    function _decodeHeader($input)
    {
        $input = preg_replace('/(=\?[^?]+\?(q|b)\?[^?]*\?=)(\s)+=\?/i', '\1=?', $input);
        while (preg_match('/(=\?([^?]+)\?(q|b)\?([^?]*)\?=)/i', $input, $matches)) 
        {
            $encoded  = $matches[1];
            $charset  = $matches[2];
            $encoding = $matches[3];
            $text     = $matches[4];        switch (strtolower($encoding)) {
                case 'b':
                    $text = base64_decode($text);
                    break;            case 'q':
                    $text = str_replace('_', ' ', $text);
                    preg_match_all('/=([a-f0-9]{2})/i', $text, $matches);
                    foreach($matches[1] as $value)
                        $text = str_replace('='.$value, chr(hexdec($value)), $text);
                    break;
            }        $input = str_replace($encoded, $text, $input);
        }
        return $input;
    }
      

  3.   

    3E理念在薪资结构设计中的决策作�� .doc