diff options
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | program/include/main.inc | 56 |
2 files changed, 29 insertions, 28 deletions
@@ -4,6 +4,7 @@ CHANGELOG RoundCube Webmail 2009/02/27 (thomasb) ---------- - Fix mime-type detection using a hard-coded map (#1485311) +- Don't return empty string if charset conversion failed (#1485757) 2009/02/26 (alec) ---------- diff --git a/program/include/main.inc b/program/include/main.inc index 928ab3531..86fe578ca 100644 --- a/program/include/main.inc +++ b/program/include/main.inc @@ -201,23 +201,20 @@ function rcube_charset_convert($str, $from, $to=NULL) ); // convert charset using iconv module - if (function_exists('iconv') && $from != 'UTF-7' && $to != 'UTF-7') - { + if (function_exists('iconv') && $from != 'UTF-7' && $to != 'UTF-7') { $aliases['GB2312'] = 'GB18030'; $_iconv = iconv(($aliases[$from] ? $aliases[$from] : $from), ($aliases[$to] ? $aliases[$to] : $to) . "//IGNORE", $str); - if ($_iconv !== false) - { + if ($_iconv !== false) { return $_iconv; - } } + } if (is_null($mbstring_loaded)) $mbstring_loaded = extension_loaded('mbstring'); // convert charset using mbstring module - if ($mbstring_loaded) - { + if ($mbstring_loaded) { $aliases['UTF-7'] = 'UTF7-IMAP'; $aliases['WINDOWS-1257'] = 'ISO-8859-13'; @@ -230,45 +227,48 @@ function rcube_charset_convert($str, $from, $to=NULL) $mb_to = $aliases[$to] ? $aliases[$to] : $to; // return if encoding found, string matches encoding and convert succeeded - if (in_array($mb_from, $mbstring_list) && in_array($mb_to, $mbstring_list)) - if (mb_check_encoding($str, $mb_from)) - if ($out = mb_convert_encoding($str, $mb_to, $mb_from)) - return $out; + if (in_array($mb_from, $mbstring_list) && in_array($mb_to, $mbstring_list)) { + if (mb_check_encoding($str, $mb_from) && ($out = mb_convert_encoding($str, $mb_to, $mb_from))) + return $out; } + } if (class_exists('utf8')) $conv = new utf8(); // convert string to UTF-8 - if ($from == 'UTF-7') - $str = utf7_to_utf8($str); - else if (($from == 'ISO-8859-1') && function_exists('utf8_encode')) + if ($from == 'UTF-7') { + if ($_str = utf7_to_utf8($str)) + $str = $_str; + } + else if (($from == 'ISO-8859-1') && function_exists('utf8_encode')) { $str = utf8_encode($str); - else if ($from != 'UTF-8' && $conv) - { + } + else if ($from != 'UTF-8' && $conv) { $conv->loadCharset($from); $str = $conv->strToUtf8($str); - } - else if ($from != 'UTF-8') + } + else if ($from != 'UTF-8') {} $error = true; // encode string for output - if ($to == 'UTF-7') + if ($to == 'UTF-7') { return utf8_to_utf7($str); - else if ($to == 'ISO-8859-1' && function_exists('utf8_decode')) + } + else if ($to == 'ISO-8859-1' && function_exists('utf8_decode')) { return utf8_decode($str); - else if ($to != 'UTF-8' && $conv) - { + } + else if ($to != 'UTF-8' && $conv) { $conv->loadCharset($to); return $conv->utf8ToStr($str); - } - else if ($to != 'UTF-8') + } + else if ($to != 'UTF-8') { $error = true; - + } + // report error - if ($error && !$convert_warning) - { + if ($error && !$convert_warning){ raise_error(array( 'code' => 500, 'type' => 'php', @@ -277,7 +277,7 @@ function rcube_charset_convert($str, $from, $to=NULL) ), true, false); $convert_warning = true; - } + } // return UTF-8 string return $str; |