From d6f584fc85fe75477a70841bfef63816fb346aa5 Mon Sep 17 00:00:00 2001 From: tokul Date: Sun, 16 May 2004 13:05:36 +0000 Subject: [PATCH] making decision about conversion before actual conversion. removing old comments about nbsp. adding header conversion if function asks for it in $decide and conversion is possible. Fixes header conversion problems in compose. Not nice but works. git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@7467 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- functions/mime.php | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/functions/mime.php b/functions/mime.php index 07cfe443..3c234d1d 100644 --- a/functions/mime.php +++ b/functions/mime.php @@ -619,7 +619,7 @@ function decodeBody($body, $encoding) { * @return string decoded header string */ function decodeHeader ($string, $utfencode=true,$htmlsave=true,$decide=false) { - global $languages, $squirrelmail_language; + global $languages, $squirrelmail_language,$default_charset; if (is_array($string)) { $string = implode("\n", $string); } @@ -660,28 +660,42 @@ function decodeHeader ($string, $utfencode=true,$htmlsave=true,$decide=false) { $j = $i; $ret .= $res[1]; $encoding = ucfirst($res[3]); + + /* decide about valid decoding */ + if ($decide && is_conversion_safe($res[2])) { + $utfencode=true; + $can_be_encoded=true; + } else { + $can_be_encoded=false; + } switch ($encoding) { case 'B': $replace = base64_decode($res[4]); - $ret .= charset_decode($res[2],$replace); + if ($can_be_encoded) { + /* convert string to different charset, + * if functions asks for it (usually in compose) + */ + $ret .= charset_convert($res[2],$replace,$default_charset); + } else { + // convert string to html codes in order to display it + $ret .= charset_decode($res[2],$replace); + } break; case 'Q': $replace = str_replace('_', ' ', $res[4]); $replace = preg_replace('/=([0-9a-f]{2})/ie', 'chr(hexdec("\1"))', $replace); - /* decide about valid decoding */ - if ($decide && is_conversion_safe($res[2])) { - $utfencode=true; - $can_be_decoded=true; - } else { - $can_be_decoded=false; - } - /* Only encode into entities by default. Some places - * don't need the encoding, like the compose form. - */ if ($utfencode) { + if ($can_be_encoded) { + /* convert string to different charset, + * if functions asks for it (usually in compose) + */ + $replace = charset_convert($res[2], $replace,$default_charset); + } else { + // convert string to html codes in order to display it $replace = charset_decode($res[2], $replace); + } } else { if ($htmlsave) { $replace = htmlspecialchars($replace); @@ -739,10 +753,6 @@ function encodeHeader ($string) { function_exists($languages[$squirrelmail_language]['XTRA_CODE'])) { return $languages[$squirrelmail_language]['XTRA_CODE']('encodeheader', $string); } - // instead of removing nbsp here, we don't add it in decodeHeader - // if (strtolower($default_charset) == 'iso-8859-1') { - // $string = str_replace("\240",' ',$string); - //} // Encode only if the string contains 8-bit characters or =? $j = strlen($string); -- 2.25.1