Functiondecode_mime_string ($ string) {$ posstrpos ($ string ,?); If (! Is_int ($ pos) {return $ string ;}$ precedingsubstr ($ string, 0, $ pos); // saveanyprecedingtext $ searchsubstr (
Function decode_mime_string ($ string) {$ pos = strpos ($ string, = ?); If (! Is_int ($ pos) {return $ string ;}$ preceding = substr ($ string, 0, $ pos); // save any preceding text $ search = substr ($ string, $ pos + 2, 75);/* the mime header spec says this is the longest a single encoded word can be */$ d1 = strpos ($ search ,?); If (! Is_int ($ d1) {return $ string;} $ charset = substr ($ string, $ pos + 2, $ d1); $ search = substr ($ search, $ d1 + 1); $ d2 = strpos ($ search ,?); If (! Is_int ($ d2) {return $ string ;}$ encoding = substr ($ search, 0, $ d2); $ search = substr ($ search, $ d2 + 1 ); $ end = strpos ($ search ,? =); If (! Is_int ($ end) {return $ 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); $ decoded = urldecode ($ encoded_text); if (strtolower ($ charset) = windows-1251) {$ decoded = conver T_cyr_string ($ decoded, w, k);} break; case B: case B: $ decoded = urldecode (base64_decode ($ encoded_text); if (strtolower ($ charset) = windows-1251) {$ decoded = convert_cyr_string ($ decoded, w, k);} break; default: $ decoded =?. $ Charset .?. $ Encoding .?. $ Encoded_text .? =; Break;} return $ preceding. $ decoded. decode_mime_string ($ rest);} // decode_mime_string ()