diff options
author | alecpl <alec@alec.pl> | 2010-03-23 09:53:08 +0000 |
---|---|---|
committer | alecpl <alec@alec.pl> | 2010-03-23 09:53:08 +0000 |
commit | 9e8d8587d3377b7856a98b9a58fc3b77842c7f27 (patch) | |
tree | 7971793804821018a9ec7ea2bb4440668ead3564 /program/lib/Mail | |
parent | 18ace62791fa759022e85eff8f4bcca48687ee5d (diff) |
- Mail_Mime-1.6.2
Diffstat (limited to 'program/lib/Mail')
-rw-r--r-- | program/lib/Mail/mimePart.php | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/program/lib/Mail/mimePart.php b/program/lib/Mail/mimePart.php index 21811703d..8d6d2577e 100644 --- a/program/lib/Mail/mimePart.php +++ b/program/lib/Mail/mimePart.php @@ -1066,16 +1066,17 @@ class Mail_mimePart */ function encodeQP($str) { - // Replace all special characters used by the encoder - $search = array('=', '_', '?', ' '); - $replace = array('=3D', '=5F', '=3F', '_'); - $str = str_replace($search, $replace, $str); - - // Replace all extended characters (\x80-xFF) with their - // ASCII values. - return preg_replace_callback( - '/([\x80-\xFF])/', array('Mail_mimePart', '_qpReplaceCallback'), $str + // Bug #17226 RFC 2047 restricts some characters + // if the word is inside a phrase, permit chars are only: + // ASCII letters, decimal digits, "!", "*", "+", "-", "/", "=", and "_" + + // "=", "_", "?" must be encoded + $regexp = '/([\x22-\x29\x2C\x2E\x3A-\x40\x5B-\x60\x7B-\x7E\x80-\xFF])/'; + $str = preg_replace_callback( + $regexp, array('Mail_mimePart', '_qpReplaceCallback'), $str ); + + return str_replace(' ', '_', $str); } /** |