summaryrefslogtreecommitdiff
path: root/program/include
diff options
context:
space:
mode:
authorthomascube <thomas@roundcube.net>2006-01-13 17:14:38 +0000
committerthomascube <thomas@roundcube.net>2006-01-13 17:14:38 +0000
commit3f9edb4c3ec29b5b807d99da479333b62a406686 (patch)
treefdadd75e52549b059602a32ce22223929584e9aa /program/include
parentc0309556342871c2f65b5212ffdf35579d1ce7e6 (diff)
Switched to full UTF-8 support
Diffstat (limited to 'program/include')
-rw-r--r--program/include/main.inc90
-rw-r--r--program/include/rcube_imap.inc46
-rw-r--r--program/include/rcube_shared.inc10
3 files changed, 75 insertions, 71 deletions
diff --git a/program/include/main.inc b/program/include/main.inc
index e40ab0948..ab11911b2 100644
--- a/program/include/main.inc
+++ b/program/include/main.inc
@@ -289,7 +289,7 @@ function rcube_language_prop($lang, $prop='lang')
// 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();
@@ -307,14 +307,9 @@ function load_gui()
// 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');
@@ -324,10 +319,8 @@ function load_gui()
// 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'));
}
@@ -704,39 +697,46 @@ function rcmail_clear_session_temp($sess_id)
-// 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 = strtolower($from);
+ $to = $to==NULL ? strtolower($GLOBALS['CHARSET']) : strtolower($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;
+
+ // decode characters
+ if ($from=='utf-7')
+ $str = UTF7DecodeString($str);
+ else if ($from=='utf-8' && function_exists('utf8_decode'))
+ $str = utf8_decode($str);
+ else if ($from=="koi8-r")
+ $str = convert_cyr_string($str, 'k', 'i');
+ else if ($from=="windows-1251" || $from=="win-1251")
+ $str = convert_cyr_string($str, 'w', 'i');
+ else if ($from=="x-cp866")
+ $str = convert_cyr_string($str, 'a', 'i');
+ else if ($from=="x-mac-cyrillic")
+ $str = convert_cyr_string($str, 'm', 'i');
+
// encode string for output
- if ($CHARSET=='UTF-8' && $charset!='utf-8' && function_exists('utf8_encode'))
- $output = utf8_encode($output);
+ if ($to=='utf-8' && function_exists('utf8_encode'))
+ return utf8_encode($str);
+ else if ($to=='utf-7')
+ return UTF7EncodeString($str);
- return $output;
+ // return raw 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)
@@ -794,7 +794,7 @@ function rep_specialchars_output($str, $enctype='', $mode='', $newlines=TRUE)
$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);
}
@@ -819,26 +819,6 @@ function rep_specialchars_output($str, $enctype='', $mode='', $newlines=TRUE)
}
-// 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 **************
@@ -1022,7 +1002,7 @@ function rcube_xml_command($command, $str_attrib, $a_attrib=NULL)
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;
diff --git a/program/include/rcube_imap.inc b/program/include/rcube_imap.inc
index 7b71dc09c..eb021159d 100644
--- a/program/include/rcube_imap.inc
+++ b/program/include/rcube_imap.inc
@@ -70,7 +70,7 @@ class rcube_imap
*/
function __construct($db_conn)
{
- $this->db = $db_conn;
+ $this->db = $db_conn;
}
@@ -376,14 +376,28 @@ class rcube_imap
}
- // get message count for a specific mailbox; acceptes modes are: ALL, UNSEEN, RECENT
+ /**
+ * Get message count for a specific mailbox
+ *
+ * @param string Mailbox/folder name
+ * @param string Mode for count [ALL|UNSEEN|RECENT]
+ * @param boolean Force reading from server and update cache
+ * @return number Number of messages
+ * @access public
+ */
function messagecount($mbox='', $mode='ALL', $force=FALSE)
{
$mailbox = $mbox ? $this->_mod_mailbox($mbox) : $this->mailbox;
return $this->_messagecount($mailbox, $mode, $force);
}
- // private method for getting nr of mesages
+
+ /**
+ * Private method for getting nr of messages
+ *
+ * @access private
+ * @see rcube_imap::messagecount
+ */
function _messagecount($mailbox='', $mode='ALL', $force=FALSE)
{
$a_mailbox_cache = FALSE;
@@ -442,8 +456,17 @@ class rcube_imap
}
- // public method for listing headers
- // convert mailbox name with root dir first
+ /**
+ * Public method for listing headers
+ * convert mailbox name with root dir first
+ *
+ * @param string Mailbox/folder name
+ * @param number Current page to list
+ * @param string Header field to sort by
+ * @param string Sort order [ASC|DESC]
+ * @return array Indexed array with message header objects
+ * @access public
+ */
function list_headers($mbox='', $page=NULL, $sort_field=NULL, $sort_order=NULL)
{
$mailbox = $mbox ? $this->_mod_mailbox($mbox) : $this->mailbox;
@@ -451,7 +474,12 @@ class rcube_imap
}
- // private method for listing message header
+ /**
+ * Private method for listing message header
+ *
+ * @access private
+ * @see rcube_imap::list_headers
+ */
function _list_headers($mailbox='', $page=NULL, $sort_field=NULL, $sort_order=NULL, $recursive=FALSE)
{
if (!strlen($mailbox))
@@ -1548,10 +1576,10 @@ class rcube_imap
$rest = quoted_printable_decode($rest);
}
- return decode_specialchars($rest, $a[0]);
+ return rcube_charset_convert($rest, $a[0]);
}
else
- return $str; //we dont' know what to do with this
+ return $str; // we dont' know what to do with this
}
@@ -1599,7 +1627,7 @@ class rcube_imap
function charset_decode($body, $ctype_param)
{
if (is_array($ctype_param) && !empty($ctype_param['charset']))
- return decode_specialchars($body, $ctype_param['charset']);
+ return rcube_charset_convert($body, $ctype_param['charset']);
return $body;
}
diff --git a/program/include/rcube_shared.inc b/program/include/rcube_shared.inc
index b622203dd..a36458b00 100644
--- a/program/include/rcube_shared.inc
+++ b/program/include/rcube_shared.inc
@@ -88,13 +88,9 @@ class rcube_html_page
$this->charset = $charset;
}
-
- function encode_string($str)
+ function get_charset()
{
- if ($this->charset=='UTF-8' && function_exists('utf8_encode'))
- return utf8_encode($str);
- else
- return $str;
+ return $this->charset;
}
@@ -187,7 +183,7 @@ class rcube_html_page
// correct absolute pathes in images and other tags
$output = preg_replace('/(src|href|background)=(["\']?)(\/[a-z0-9_\-]+)/Ui', "\\1=\\2$base_path\\3", $output);
- print $output;
+ print rcube_charset_convert($output, 'UTF-8', $this->charset);
}