| | |
| | | |
| | | require_once('lib/des.inc'); |
| | | require_once('lib/utf7.inc'); |
| | | require_once('lib/utf8.class.php'); |
| | | |
| | | |
| | | // register session and connect to server |
| | |
| | | // init output object for GUI and add common scripts |
| | | function load_gui() |
| | | { |
| | | global $CONFIG, $OUTPUT, $COMM_PATH, $JS_OBJECT_NAME, $CHARSET, $sess_user_lang; |
| | | global $CONFIG, $OUTPUT, $COMM_PATH, $JS_OBJECT_NAME, $sess_user_lang; |
| | | |
| | | // init output page |
| | | $OUTPUT = new rcube_html_page(); |
| | |
| | | |
| | | // set user-selected charset |
| | | if (!empty($CONFIG['charset'])) |
| | | { |
| | | $OUTPUT->set_charset($CONFIG['charset']); |
| | | $CHARSET = $CONFIG['charset']; |
| | | } |
| | | else |
| | | { |
| | | rcmail_set_locale($sess_user_lang); |
| | | } |
| | | |
| | | // add some basic label to client |
| | | rcube_add_label('loading'); |
| | |
| | | // set localization charset based on the given language |
| | | function rcmail_set_locale($lang) |
| | | { |
| | | global $OUTPUT, $CHARSET; |
| | | |
| | | $CHARSET = rcube_language_prop($lang, 'charset'); |
| | | $OUTPUT->set_charset($CHARSET); |
| | | global $OUTPUT; |
| | | $OUTPUT->set_charset(rcube_language_prop($lang, 'charset')); |
| | | } |
| | | |
| | | |
| | |
| | | } |
| | | |
| | | // send response code |
| | | print $js_code; |
| | | print rcube_charset_convert($js_code, 'UTF-8', $GLOBALS['CHARSET']); |
| | | |
| | | if ($flush) // flush the output buffer |
| | | flush(); |
| | |
| | | |
| | | |
| | | |
| | | // decode characters from any charset to UTF-8 |
| | | function decode_specialchars($input, $charset='') |
| | | // convert a string from one charset to another |
| | | // this function is not complete and not tested well |
| | | function rcube_charset_convert($str, $from, $to=NULL) |
| | | { |
| | | global $CHARSET; |
| | | $charset = strtolower($charset); |
| | | $from = strtoupper($from); |
| | | $to = $to==NULL ? strtoupper($GLOBALS['CHARSET']) : strtoupper($to); |
| | | |
| | | if ($charset=='utf-7') |
| | | $output = UTF7DecodeString($input); |
| | | else if ($charset=='utf-8' && $CHARSET!='UTF-8' && function_exists('utf8_decode')) |
| | | $output = utf8_decode($input); |
| | | else if ($charset=="koi8-r") |
| | | $output = convert_cyr_string($input, 'k', 'w'); |
| | | else if ($charset=="iso8859-5") |
| | | $output = convert_cyr_string($input, 'i', 'w'); |
| | | else if ($charset=="x-cp866") |
| | | $output = convert_cyr_string($input, 'a', 'w'); |
| | | else if ($charset=="x-mac-cyrillic") |
| | | $output = convert_cyr_string($input, 'm', 'w'); |
| | | else |
| | | $output = $input; |
| | | if ($from==$to) |
| | | return $str; |
| | | |
| | | // encode string for output |
| | | if ($CHARSET=='UTF-8' && $charset!='utf-8' && function_exists('utf8_encode')) |
| | | $output = utf8_encode($output); |
| | | // convert charset using iconv module |
| | | if (function_exists('iconv') && $from!='UTF-7' && $to!='UTF-7') { |
| | | return iconv($from, $to, $str); |
| | | } |
| | | |
| | | // convert string to UTF-8 |
| | | if ($from=='UTF-7') |
| | | $str = rcube_charset_convert(UTF7DecodeString($str), 'ISO-8859-1'); |
| | | else if ($from=='ISO-8859-1' && function_exists('utf8_encode')) |
| | | $str = utf8_encode($str); |
| | | else if ($from!='UTF-8') |
| | | { |
| | | $conv = new utf8($from); |
| | | $str = $conv->strToUtf8($str); |
| | | } |
| | | |
| | | return $output; |
| | | // encode string for output |
| | | if ($to=='UTF-7') |
| | | return UTF7EncodeString($str); |
| | | else if ($to=='ISO-8859-1' && function_exists('utf8_decode')) |
| | | return utf8_decode($str); |
| | | else if ($to!='UTF-8') |
| | | { |
| | | $conv = new utf8($to); |
| | | return $conv->utf8ToStr($str); |
| | | } |
| | | |
| | | // return UTF-8 string |
| | | return $str; |
| | | } |
| | | |
| | | |
| | | |
| | | // replace specials characters to a specific encoding type |
| | | function rep_specialchars_output($str, $enctype='', $mode='', $newlines=TRUE) |
| | | { |
| | | global $OUTPUT_TYPE, $CHARSET; |
| | | global $OUTPUT_TYPE, $OUTPUT; |
| | | static $html_encode_arr, $js_rep_table, $rtf_rep_table, $xml_rep_table; |
| | | |
| | | if (!$enctype) |
| | |
| | | $rtf_rep_table[Chr($c)] = "\\'$hex"; |
| | | $xml_rep_table[Chr($c)] = "&#$c;"; |
| | | |
| | | if ($CHARSET=='ISO-8859-1') |
| | | if ($OUTPUT->get_charset()=='ISO-8859-1') |
| | | $js_rep_table[Chr($c)] = sprintf("\u%s%s", str_repeat('0', 4-strlen($hex)), $hex); |
| | | } |
| | | |
| | |
| | | return $str; |
| | | } |
| | | |
| | | |
| | | // convert a string from one charset to another |
| | | // this function is not complete and not tested well |
| | | function rcube_charset_convert($str, $from, $to) |
| | | { |
| | | $charset = strtolower($to); |
| | | |
| | | if (strtolower($from)==$charset) |
| | | return $str; |
| | | |
| | | $str = decode_specialchars($str, $from); |
| | | |
| | | if ($charset=='utf-8' && function_exists('utf8_encode')) |
| | | return utf8_encode($str); |
| | | else if ($charset=='utf-7') |
| | | return UTF7EncodeString($str); |
| | | |
| | | return $str; |
| | | } |
| | | |
| | | |
| | | |
| | | // ************** template parsing and gui functions ************** |
| | |
| | | else if (isset($GLOBALS['PAGE_TITLE'])) |
| | | $title .= $GLOBALS['PAGE_TITLE']; |
| | | else if ($task=='mail' && ($mbox_name = $IMAP->get_mailbox_name())) |
| | | $title .= $OUTPUT->encode_string(UTF7DecodeString($mbox_name)); |
| | | $title .= rcube_charset_convert($mbox_name, 'UTF-7', 'UTF-8'); |
| | | else |
| | | $title .= $task; |
| | | |