diff options
| -rw-r--r-- | program/include/main.inc | 23 | 
1 files changed, 14 insertions, 9 deletions
| diff --git a/program/include/main.inc b/program/include/main.inc index 7a0f0ca16..ddecd6ece 100644 --- a/program/include/main.inc +++ b/program/include/main.inc @@ -190,11 +190,10 @@ function rcube_charset_convert($str, $from, $to=NULL)    if ($from == $to || empty($str) || empty($from))      return $str; -     +    // convert charset using iconv module      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); +    $_iconv = iconv($from, $to . '//IGNORE', $str);      if ($_iconv !== false) {          return $_iconv;      } @@ -244,6 +243,7 @@ function rcube_charset_convert($str, $from, $to=NULL)        $str = utf8_encode($str);      }      else if ($from != 'UTF-8' && $conv) { +      $from = preg_replace(array('/^WINDOWS-*/', '/^CP-/'), array('CP', 'CP'), $from);        $conv->loadCharset($from);        $str = $conv->strToUtf8($str);      } @@ -264,6 +264,7 @@ function rcube_charset_convert($str, $from, $to=NULL)        return utf8_decode($str);      }      else if ($to != 'UTF-8' && $conv) { +      $to = preg_replace(array('/^WINDOWS-*/', '/^CP-/'), array('CP', 'CP'), $to);        $conv->loadCharset($to);        return $conv->utf8ToStr($str);      } @@ -305,14 +306,14 @@ function rcube_parse_charset($charset)    $charset = str_replace('UNICODE-1-1-', '', $charset);    $aliases = array( -    'USASCII'       => 'ISO-8859-1', -    'ANSIX31101983' => 'ISO-8859-1', -    'ANSIX341968'   => 'ISO-8859-1', +    'USASCII'       => 'WINDOWS-1252', +    'ANSIX31101983' => 'WINDOWS-1252', +    'ANSIX341968'   => 'WINDOWS-1252',      'UNKNOWN8BIT'   => 'ISO-8859-15',      'XUNKNOWN'      => 'ISO-8859-15',      'XUSERDEFINED'  => 'ISO-8859-15', -    'ISO88598I'     => 'ISO-8859-8',      'KSC56011987'   => 'EUC-KR', +    'GB2312' 	    => 'GB18030',      'UNICODE'	    => 'UTF-8',      'UTF7IMAP'	    => 'UTF7-IMAP'    ); @@ -325,8 +326,12 @@ function rcube_parse_charset($charset)    if (preg_match('/UTF(7|8|16|32)(BE|LE)*/', $str, $m))      return 'UTF-' . $m[1] . $m[2]; -  if (preg_match('/ISO8859([0-9]{0,2})/', $str, $m)) -    return 'ISO-8859-' . ($m[1] ? $m[1] : 1); +  if (preg_match('/ISO8859([0-9]{0,2})/', $str, $m)) { +    $iso = 'ISO-8859-' . ($m[1] ? $m[1] : 1); +    # some clients sends windows-1252 text as latin1, +    # it is safe to use windows-1252 for all latin1 +    return $iso == 'ISO-8859-1' ? 'WINDOWS-1252' : $iso; +    }    return $charset;    } | 
