関数 decode_mime_string ($string) { $pos = strpos($string, =?); if (!is_int($pos)) { $string を返します。 $preceding = substr($string, 0, $pos); // 先行するテキストを保存 $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 (strto lower($charset) == windows-1251) { $decoded = Convert_cyr_string($decoded, w, k); } 壊す;ケース B: ケース B: $decoded = urldecode(base64_decode($encoded_text)); if (strto lower($charset) == windows-1251) { $decoded = Convert_cyr_string($decoded, w, k); } 壊す;デフォルト: $decoded = =? 。 $charset 。 ? 。 $エンコーディング 。 ? 。 $encoded_text 。 ?=;壊す; $preceding を返します。 $decode 。デコード_mime_string($rest); } // decode_mime_string()