テキスト、テキスト => TYPETEXT、TYPEMULTIPART => マルチパート、マルチパート => TYPEMULTIPART、TYPEMESSAGE => メッセージ、メッセージ => TYPEMESSAGE、TYPEAPPLICATION => アプリケーション、アプリケーション => TYPEAPPLICATION、TYPEAUDIO => オーディオ、オーディオ => TYPEAUDIO、TYPEIMAGE = > 画像、画像 => TYPEIMAGE、TYPEVIDEO => ビデオ、ビデオ => TYPEVIDEO、TYPEOTHER => 不明、不明 => TYPEOTHER ); $mime_encodings = array( ENC7BIT => 7ビット, 7ビット => ENC7BIT, ENC8BIT => 8ビット, 8ビット => ENC8BIT, ENCBINARY => バイナリ, バイナリ => ENCBINARY, ENCBASE64 => Base64, Base64 => ENCBASE64, ENCQUOTEDPRINTABLE => quote- printable、quoted-printable => ENCQUOTEDPRINTABLE、ENCOTHER => 不明、不明 => ENCOTHER ); /*** MIME:: クラスは、MIME 標準を処理するためのメソッドを提供します。 * * @author Chuck Hagenbuch * @version $Revision: 1.64 $ * @horde 1.3 以降 * @package horde.mime*/ class MIME { /*** 文字列に 8 ビット文字が含まれているかどうかを判断します。 * @access private * * @param string $string チェックする文字列。 * @return boolean 存在する場合は true、存在しない場合は false。*/ function is8bit($string) { if (is_string($string)) { for ($i = 0; $i > 7) return true ; false を返します。 false を返します。 } /*** RFC 2047 に従って、非 ASCII 文字を含む文字列をエンコードします。 * * @param string $text エンコードするテキスト。 * @param string $charset (オプション) テキストの文字セット。 * @param boolean $outer これは最後の反復ですか? * * @return string ASCII 以外の文字が含まれる場合にのみエンコードされるテキスト。*/ 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)), , _) 。 「?=
"; } } // これが最後の反復の場合、 // 末尾の改行/タブ文字を削除します。 if ($outer && (substr($text, -2) == "
")) $text = substr($text, 0, -2); return $text; } /*** RFC 2047 に従って電子メール アドレスを含む文字列をエンコードします。 * * これは MIME::encode() とは異なります。これは電子メール アドレスを正当に保ち、 * 個人情報のみをエンコードするためです。 * * @param string $text エンコードする電子メール アドレス。 * @param string $charset (オプション) テキストの文字セット。 * @param string $defserver (オプション) メールボックスに追加するデフォルトのドメイン。 * * @return string ASCII 以外の文字が含まれる場合にのみエンコードされるテキスト。*/ 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 ($ 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 .= , ; // FIXME: imap モジュールの依存関係 $text .= MIME::trimEmailAddress(imap_rfc822_write_address($addr->mailbox, $addr->host, $personal)); ; } /*** RFC 2047 でエンコードされた文字列をデコードします。 * * @param string $string デコードするテキスト。 * @return string デコードされたテキスト、またはエンコードされていない場合は元の文字列。*/ function decode($string) { $pos = strpos($string, =?); if ($pos === false) { return $string;複数のエンコードされた単語の間 $string = preg_replace(|?=s=?|, ?==?, $string); // 先行するテキストを保存します $search = substr ($string, $pos + 2, 75); // MIME ヘッダーの仕様では、これが 1 つのエンコードされた単語の最長であると規定されています $d1 = strpos($search, ?); if (!is_int($d1)) { $string を返します。 $charset = substr($string, $pos + 2, $d1); $search = substr($search, $d1 + 1); $d2 = strpos($search, ?); if (!is_int($d2)) { $string を返します。 $encoding = substr($search, 0, $d2); $search = substr($search, $d2+1); $end = strpos($search, ?=); if (!is_int($end)) { $string を返します。 $encoded_text = substr($search, 0, $end); $rest = substr($string, (strlen($preceding . $charset . $encoding . $encoded_text) + 6)); switch ($encoding) { case Q: case q: $encoded_text = str_replace(_, %20, $encoded_text); $encoded_text = str_replace(=, %, $encoded_text); $decode = urldecode($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); } }壊す;ケース B: ケース 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); } } 壊す;デフォルト: $decoded = =? 。 $charset 。 ? 。 $エンコーディング 。 ? 。 $encoded_text 。 ?=;壊す; $preceding を返します。 $decode 。 MIME::decode($rest); } /*** メール アドレスに個人情報が含まれていない場合は、そのアドレスを囲んでいる * 山括弧 () を削除してください。 * * @param string $address トリミングするアドレス。 * @return string トリミングされたアドレス。*/ function trimEmailAddress($address) { $address = trim($address); if ((substr($address, 0, 1) == )) { $address = substr($address, 1, -1); $address を返します。 } } ?>
http://www.bkjia.com/PHPjc/531855.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/531855.html技術記事テキスト、テキスト => TYPETEXT、TYPEMULTIPART => マルチパート、マルチパート => TYPEMULTIPART、TYPEMESSAGE => メッセージ、メッセージ => TYPEMESSAGE、TYPEAPPLICATION => アプリケーション、アプリケーション => TYPEA...