alecpl
2010-02-05 b77c9d4669ec9596c8d39d0dec29c8a343aaa155
program/include/main.inc
@@ -69,7 +69,7 @@
 */
function get_sequence_name($sequence)
  {
  // return table name if configured
  // return sequence name if configured
  $config_key = 'db_sequence_'.$sequence;
  $opt = rcmail::get_instance()->config->get($config_key);
@@ -170,6 +170,18 @@
/**
 * Catch an error and throw an exception.
 *
 * @param  int    Level of the error
 * @param  string Error message
 */
function rcube_error_handler($errno, $errstr)
  {
  throw new ErrorException($errstr, 0, $errno);
  }
/**
 * Convert a string from one charset to another.
 * Uses mbstring and iconv functions if possible
 *
@@ -180,6 +192,7 @@
 */
function rcube_charset_convert($str, $from, $to=NULL)
  {
  static $iconv_options = null;
  static $mbstring_loaded = null;
  static $mbstring_list = null;
  static $convert_warning = false;
@@ -187,7 +200,7 @@
  
  $error = false;
  $to = empty($to) ? $to = strtoupper(RCMAIL_CHARSET) : rcube_parse_charset($to);
  $to = empty($to) ? strtoupper(RCMAIL_CHARSET) : rcube_parse_charset($to);
  $from = rcube_parse_charset($from);
  if ($from == $to || empty($str) || empty($from))
@@ -195,20 +208,36 @@
  // convert charset using iconv module  
  if (function_exists('iconv') && $from != 'UTF-7' && $to != 'UTF-7') {
    $_iconv = iconv($from, $to . '//IGNORE', $str);
    if ($iconv_options === null) {
      // transliterate characters not available in output charset
      $iconv_options = '//TRANSLIT';
      if (iconv('', $iconv_options, '') === false) {
        // iconv implementation does not support options
        $iconv_options = '';
      }
    }
    // throw an exception if iconv reports an illegal character in input
    // it means that input string has been truncated
    set_error_handler('rcube_error_handler', E_NOTICE);
    try {
      $_iconv = iconv($from, $to . $iconv_options, $str);
    } catch (ErrorException $e) {
      $_iconv = false;
    }
    restore_error_handler();
    if ($_iconv !== false) {
        return $_iconv;
      return $_iconv;
    }
  }
  if (is_null($mbstring_loaded))
  if ($mbstring_loaded === null)
    $mbstring_loaded = extension_loaded('mbstring');
    
  // convert charset using mbstring module
  if ($mbstring_loaded) {
    $aliases['WINDOWS-1257'] = 'ISO-8859-13';
    
    if (is_null($mbstring_list)) {
    if ($mbstring_list === null) {
      $mbstring_list = mb_list_encodings();
      $mbstring_list = array_map('strtoupper', $mbstring_list);
    }