我用126邮箱发送的邮件主题是:
我是一个中国人,但我用php 接收程序 接收到的主题则是[date] => Wed, 6 Jul 2011 10:37:35 +0800 (CST)
[Date] => Wed, 6 Jul 2011 10:37:35 +0800 (CST)
[subject] => =?gbk?B?ztLKx9K7uPbW0Ln6yMs=?=
[Subject] => =?gbk?B?ztLKx9K7uPbW0Ln6yMs=?=主题是如下乱码,
?gbk?B?ztLKx9K7uPbW0Ln6yMs=?=
请问如何转换成正确的主题。
我是一个中国人,但我用php 接收程序 接收到的主题则是[date] => Wed, 6 Jul 2011 10:37:35 +0800 (CST)
[Date] => Wed, 6 Jul 2011 10:37:35 +0800 (CST)
[subject] => =?gbk?B?ztLKx9K7uPbW0Ln6yMs=?=
[Subject] => =?gbk?B?ztLKx9K7uPbW0Ln6yMs=?=主题是如下乱码,
?gbk?B?ztLKx9K7uPbW0Ln6yMs=?=
请问如何转换成正确的主题。
这样试试呢?
http://blog.csdn.net/a82168506/article/details/6267814 /**
* decode the subject of chinese
*
* @param string $subject
* @return sting
*/
public function subjectDecode($subject) {
$separator = '=?GB2312';
$encode = strstr($subject,$separator);
if($encode) {
$explodeArr = explode($separator,$subject);
$length = count($explodeArr);
$subjectArr = array();
for($i = 0;$i < $length/2;$i++) {
$subjectArr[$i][] = $explodeArr[$i*2];
if(@$explodeArr[$i*2 + 1]) {
$subjectArr[$i][] = $explodeArr[$i*2 + 1];
}
}
foreach ($subjectArr as $arr) {
$subSubject = implode($separator,$arr);
if(count($arr) == 1) {
$subSubject = $separator.$subSubject;
}
$begin = strpos($subSubject ,"=?") ;
$end = strpos($subSubject , "?=") ;
$beginStr = '';
$endStr = '';
if ($end >0) {
if ($begin > 0) {
$beginStr = substr($subSubject,0,$begin) ;
}
if ((strlen($subSubject) - $end)> 2) {
$endStr = substr($subSubject,$end + 2 , strlen($subSubject)-$end-2) ;
}
$str = substr($subSubject,0, $end - strlen($subSubject) );
$pos = strrpos($str,"?") ;
$str = substr($str,$pos + 1 ,strlen($str)-$pos);
$subSubject = $beginStr . imap_base64($str) . $endStr ;
$subSubjectArr[] = mb_convert_encoding($subSubject,'utf-8','gbk');
}
}
$subject = implode('',$subSubjectArr);
}
return $subject ;
}这是我去掉标题乱码的那个类。
$t = explode('?', $s);
echo base64_decode($t[3]); //我是一个中国人
echo $t[1];//gbk 依据 $t[1] 的值来决定是否运行对 $t[3] 解码后结果的转码