php MIME 解码,使用php的编码功能-mime.inc

使用php的编码功能-mime.inc推荐查看本文HTML版本

// $Horde: horde/lib/MIME.php,v 1.63 2001/08/08 21:00:27 chuck Exp $

$mime_types =

array(

TYPETEXT => 'text', 'text' => TYPETEXT,

TYPEMULTIPART => 'multipart', 'multipart' => TYPEMULTIPART,

TYPEMESSAGE => 'message', 'message' => TYPEMESSAGE,

TYPEAPPLICATION => 'application', 'application' => TYPEAPPLICATION,

TYPEAUDIO => 'audio', 'audio' => TYPEAUDIO,

TYPEIMAGE => 'image', 'image' => TYPEIMAGE,

TYPEVIDEO => 'video', 'video' => TYPEVIDEO,

TYPEOTHER => 'unknown', 'unknown' => TYPEOTHER

);

$mime_encodings =

array(

ENC7BIT => '7bit', '7bit' => ENC7BIT,

ENC8BIT => '8bit', '8bit' => ENC8BIT,

ENCBINARY => 'binary', 'binary' => ENCBINARY,

ENCBASE64 => 'base64', 'base64' => ENCBASE64,

ENCQUOTEDPRINTABLE => 'quoted-printable', 'quoted-printable' => ENCQUOTEDPRINTABLE,

ENCOTHER => 'unknown', 'unknown' => ENCOTHER

);

/**

* The MIME:: class provides methods for dealing with MIME standards.

*

* @author  Chuck Hagenbuch

* @version $Revision: 1.64 $

* @since   Horde 1.3

* @package horde.mime

*/

class MIME {

/**

* Determine if a string contains 8-bit characters.

* @access private

*

* @param string $string  The string to check.

* @return boolean        true if it does, false if it doesn't.

*/

function is8bit($string)

{

if (is_string($string)) {

for ($i = 0; $i < strlen($string); $i++) {

if (ord($string[$i]) >> 7)

return true;

}

return false;

}

return false;

}

/**

* Encode a string containing non-ascii characters according to RFC 2047.

*

* @param string $text    The text to encode.

* @param string $charset (optional) The character set of the text.

* @param boolean $outer  Is this the final iteration?

*

* @return string The text, encoded only if it contains non-ascii characters.

*/

function encode($text, $charset = null, $outer = true)

{

if (MIME::is8bit($text)) {

if (((strlen($text) * 3) + strlen($charset) + 7) > 76) {

$text = MIME::encode(substr($text, 0, (23 - strlen($charset))), $charset) . MIME::encode(substr($text, (23 - strlen($charset))), $charset, false);

} else {

$text = "=?$charset?B?" . strtr(trim(base64_encode($text)), ' ', '_') . "?=\n\t";

}

}

// if this is the final iteration, take off any trailing

// newline/tab chars.

if ($outer && (substr($text, -2) == "\n\t"))

$text = substr($text, 0, -2);

return $text;

}

/**

* Encode a string containing email addresses according to RFC 2047.

*

* This differs from MIME::encode() because it keeps email

* addresses legal, only encoding the personal information.

*

* @param string $text      The email addresses to encode.

* @param string $charset   (optional) The character set of the text.

* @param string $defserver (optional) The default domain to append to mailboxes.

*

* @return string The text, encoded only if it contains non-ascii characters.

*/

function encodeAddress($text, $charset = null, $defserver = null)

{

include_once 'Mail/RFC822.php';

$addr_arr = Mail_RFC822::parseAddressList($text, $defserver, false, false);

$text = '';

if (is_array($addr_arr)) {

foreach ($addr_arr as $addr) {

if (empty($addr->personal)) {

$personal = '';

} else {

if ((substr($addr->personal, 0, 1) == '"') &&

(substr($addr->personal, -1) == '"')) {

$addr->personal = substr($addr->personal, 1, -1);

}

$personal = MIME::encode($addr->personal, $charset);

}

if (strlen($text) != 0) $text .= ', ';

/* Convert Cyrillic character sets. */

if (stristr($GLOBALS['registry']->getCharset(), 'windows-1251')) {

if (stristr($charset, 'koi8-r')) {

$decoded = convert_cyr_string($decoded, 'k', 'w');

}

}

if (stristr($GLOBALS['registry']->getCharset(), 'koi8-r')) {

if (stristr($charset, 'windows-1251')) {

$decoded = convert_cyr_string($decoded, 'w', 'k');

}

}

break;

case 'B':

case 'b':

$decoded = urldecode(base64_decode($encoded_text));

if (stristr($GLOBALS['registry']->getCharset(), 'windows-1251')) {

if (stristr($charset, 'koi8-r')) {

$decoded = convert_cyr_string($decoded, 'k', 'w');

}

}

if (stristr($GLOBALS['registry']->getCharset(), 'koi8-r')) {

if (stristr($charset, 'windows-1251')) {

$decoded = convert_cyr_string($decoded, 'w', 'k');

}

}

break;

default:

$decoded = '=?' . $charset . '?' . $encoding . '?' . $encoded_text . '?=';

break;

}

return $preceding . $decoded . MIME::decode($rest);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值