summaryrefslogtreecommitdiff
path: root/includes/unicode.inc
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2005-10-01 13:21:47 +0000
committerDries Buytaert <dries@buytaert.net>2005-10-01 13:21:47 +0000
commitc8c2fedc7e8f3ba2bd0d534b33a94c1962000b44 (patch)
tree820753dfbc124db702e1e26e863a784d23cbabc2 /includes/unicode.inc
parent0200ccf4da9bfa015361d13ebb040800944f5df9 (diff)
downloadbrdo-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.inc25
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 ("&amp;lt;" becomes "&lt;", not "<").
*