IMAP文件夹名称编码和解码方法


// 编码
function IMAPEncode($sStr)
{
$sOut = '';
$sBase64 = '';
$nIndex = 0;
$sRegAsis = '/^(?:[\x20-\x25\x27-\x7e])+/';
$sReg26 = '/^&/';
$sRegEncode = '/^(?:[^\x20-\x7e])+/';
$sRegEq = '/=+$/';
$sRegSlash = '/\//';

while ($nIndex < strlen($sStr)) { $aTmp = array(); $nResult = preg_match($sRegAsis, $sStr, &$aTmp, null, $nIndex); if ($nResult) { $nIndex += strlen($aTmp[0]); $sOut .= $aTmp[0]; continue; } $nResult = preg_match($sReg26, $sStr, &$aTmp, null, $nIndex); if ($nResult) { $nIndex += strlen($aTmp[0]); $sOut .= '&-'; continue; } $nResult = preg_match($sRegEncode, $sStr, &$aTmp, null, $nIndex); if ($nResult) { $nIndex += strlen($aTmp[0]); $sBase64 = base64_encode(iconv('UTF-8', 'UTF-16BE', $aTmp[0])); $sBase64 = preg_replace($sRegEq, '', $sBase64); $sBase64 = preg_replace($sRegSlash, ',', $sBase64); $sOut .= '&' . $sBase64 . '-'; continue; } } return $sOut; } // 解码 function IMAPDeconde($sStr) { $sOut = ''; $sBase64 = ''; $nIndex = 0; $sRegAsis = '/^([^&]+)/'; $sReg26 = '/^\&-/'; $sRegDecode = '/^\&([A-Za-z0-9+,]+)-?/'; $sRegComma = '/,/'; while ($nIndex < strlen($sStr)) { $aTmp = array(); $nResult = preg_match($sRegAsis, $sStr, &$aTmp, null, $nIndex); if ($nResult) { $nIndex += strlen($aTmp[0]); $sOut .= $aTmp[0]; continue; } $nResult = preg_match($sReg26, $sStr, &$aTmp, null, $nIndex); if ($nResult) { $nIndex += strlen($aTmp[0]); $sOut .= '&'; continue; } $nResult = preg_match($sRegDecode, $sStr, &$aTmp, null, $nIndex); if ($nResult) { $nIndex += strlen($aTmp[0]); $sBase64 = substr($aTmp[0], 1, strlen($aTmp[0]) - 2); $sBase64 = preg_replace($sRegComma, '/', $sBase64); $nMod = strlen($sBase64) % 4; if ($nMod > 0) $sBase64 .= str_repeat('=', 4 - $nMod);
$sBase64 = iconv('UTF-16BE', 'UTF-8', base64_decode($sBase64));
$sOut .= $sBase64;
continue;
}
}
return $sOut;
}


发表评论 0

Your email address will not be published. Required fields are marked *