From c8c2fedc7e8f3ba2bd0d534b33a94c1962000b44 Mon Sep 17 00:00:00 2001 From: Dries Buytaert Date: Sat, 1 Oct 2005 13:21:47 +0000 Subject: - Patch #32465 by Steven: mime decode for core. --- includes/unicode.inc | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'includes/unicode.inc') diff --git a/includes/unicode.inc b/includes/unicode.inc index 04751ed79..80ea87714 100644 --- a/includes/unicode.inc +++ b/includes/unicode.inc @@ -258,6 +258,31 @@ function _mime_header_decode($matches) { return $data; } +/** + * Complement to mime_header_encode + */ +function mime_header_decode($header) { + // First step: encoded chunks followed by other encoded chunks (need to collapse whitespace) + $header = preg_replace_callback('/=\?([^?]+)\?(Q|B)\?([^?]+|\?(?!=))\?=\s+(?==\?)/', '_mime_header_decode', $header); + // Second step: remaining chunks (do not collapse whitespace) + return preg_replace_callback('/=\?([^?]+)\?(Q|B)\?([^?]+|\?(?!=))\?=/', '_mime_header_decode', $header); +} + +/** + * Helper function to mime_header_decode + */ +function _mime_header_decode($matches) { + // Regexp groups: + // 1: Character set name + // 2: Escaping method (Q or B) + // 3: Encoded data + $data = ($matches[2] == 'B') ? base64_decode($matches[3]) : str_replace('_', ' ', quoted_printable_decode($matches[3])); + if (strtolower($matches[1]) != 'utf-8') { + $data = drupal_convert_to_utf8($data, $matches[1]); + } + return $data; +} + /** * Decode all HTML entities (including numerical ones) to regular UTF-8 bytes. * Double-escaped entities will only be decoded once ("&lt;" becomes "<", not "<"). -- cgit v1.2.3