From: fidian Date: Mon, 6 Aug 2001 14:28:09 +0000 (+0000) Subject: Patch from Philippe X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=commitdiff_plain;h=f7b3ba375106c5af315410857049ad487a383d22 Patch from Philippe git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@1474 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- diff --git a/functions/mime.php b/functions/mime.php index a9c22b7a..3939201b 100644 --- a/functions/mime.php +++ b/functions/mime.php @@ -727,28 +727,40 @@ // be encoded. function encodeHeader ($string) { global $default_charset; - - // Encode only if the string contains 8-bit characters or =? - if (ereg("([\\200-\\377]|=\\?)", $string)) { - - // First the special characters - $string = str_replace("=", "=3D", $string); - $string = str_replace("?", "=3F", $string); - $string = str_replace("_", "=5F", $string); - $string = str_replace(" ", "_", $string); - - for ( $ch = 127 ; $ch <= 255 ; $ch++ ) { - $replace = chr($ch); - $insert = sprintf("=%02X", $ch); - $string = str_replace($replace, $insert, $string); - } - - $newstring = "=?$default_charset?Q?".$string."?="; - - return $newstring; - } - - return $string; - } + + // Encode only if the string contains 8-bit characters or =? + $j = strlen( $string ); + $l = FALSE; // Must be encoded ? + $ret = ''; + for( $i=0; $i < $j; ++$i) { + switch( $string{$i} ) { + case '=': + $ret .= '=3D'; + break; + case '?': + $l = TRUE; + $ret .= '=3F'; + break; + case '_': + $ret .= '=5F'; + break; + case ' ': + $ret .= '_'; + break; + default: + $k = ord( $string{$i} ); + if( $k > 126 && $k < 256 ) { + $ret .= sprintf("=%02X", $k); + $l = TRUE; + } else + $ret .= $string{$i}; + } + } + + if( $l ) + $string = "=?$default_charset?Q?$ret?="; + + return( $string ); + } ?>