diff options
author | Dries Buytaert <dries@buytaert.net> | 2005-10-01 13:21:47 +0000 |
---|---|---|
committer | Dries Buytaert <dries@buytaert.net> | 2005-10-01 13:21:47 +0000 |
commit | c8c2fedc7e8f3ba2bd0d534b33a94c1962000b44 (patch) | |
tree | 820753dfbc124db702e1e26e863a784d23cbabc2 /includes/unicode.inc | |
parent | 0200ccf4da9bfa015361d13ebb040800944f5df9 (diff) | |
download | brdo-c8c2fedc7e8f3ba2bd0d534b33a94c1962000b44.tar.gz brdo-c8c2fedc7e8f3ba2bd0d534b33a94c1962000b44.tar.bz2 |
- Patch #32465 by Steven: mime decode for core.
Diffstat (limited to 'includes/unicode.inc')
-rw-r--r-- | includes/unicode.inc | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/includes/unicode.inc b/includes/unicode.inc index 04751ed79..80ea87714 100644 --- a/includes/unicode.inc +++ b/includes/unicode.inc @@ -259,6 +259,31 @@ function _mime_header_decode($matches) { } /** + * 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 "<"). * |