summaryrefslogtreecommitdiff
path: root/program/include/main.inc
diff options
context:
space:
mode:
authoralecpl <alec@alec.pl>2009-07-09 21:02:34 +0000
committeralecpl <alec@alec.pl>2009-07-09 21:02:34 +0000
commitce72e0125cf4188b8e7018672739641f30ba88fe (patch)
treecd26dda86a3ffaab954aa5b3c3af1482a6f5aa22 /program/include/main.inc
parent5edb5b6634b13098ee2d72078bc317f5a770a893 (diff)
- simplify 'utf8' class use, make rcube_charset_convert() 5x faster on systems without mbstring and iconv installed
Diffstat (limited to 'program/include/main.inc')
-rw-r--r--program/include/main.inc60
1 files changed, 28 insertions, 32 deletions
diff --git a/program/include/main.inc b/program/include/main.inc
index ac2906d4a..296e13fad 100644
--- a/program/include/main.inc
+++ b/program/include/main.inc
@@ -183,9 +183,9 @@ function rcube_charset_convert($str, $from, $to=NULL)
static $mbstring_loaded = null;
static $mbstring_list = null;
static $convert_warning = false;
-
+ static $conv = null;
+
$error = false;
- $conv = null;
$to = empty($to) ? $to = strtoupper(RCMAIL_CHARSET) : rcube_parse_charset($to);
$from = rcube_parse_charset($from);
@@ -223,34 +223,29 @@ function rcube_charset_convert($str, $from, $to=NULL)
}
}
- # try to convert with custom classes
- if (class_exists('utf8'))
- $conv = new utf8();
-
- // convert string to UTF-8
+ // convert charset using bundled classes/functions
if ($to == 'UTF-8') {
if ($from == 'UTF7-IMAP') {
if ($_str = utf7_to_utf8($str))
- $str = $_str;
- else
- $error = true;
+ return $_str;
}
else if ($from == 'UTF-7') {
if ($_str = rcube_utf7_to_utf8($str))
- $str = $_str;
- else
- $error = true;
+ return $_str;
}
else if (($from == 'ISO-8859-1') && function_exists('utf8_encode')) {
- $str = utf8_encode($str);
+ return utf8_encode($str);
}
- else if ($from != 'UTF-8' && $conv) {
- $from = preg_replace(array('/^WINDOWS-*125([0-8])$/', '/^CP-/'), array('CP125\\1', 'CP'), $from);
- $conv->loadCharset($from);
- $str = $conv->strToUtf8($str);
+ else if (class_exists('utf8')) {
+ if (!$conv)
+ $conv = new utf8($from);
+ else
+ $conv->loadCharset($from);
+
+ if($_str = $conv->strToUtf8($str))
+ return $_str;
}
- else if ($from != 'UTF-8')
- $error = true;
+ $error = true;
}
// encode string for output
@@ -258,36 +253,37 @@ function rcube_charset_convert($str, $from, $to=NULL)
// @TODO: we need a function for UTF-7 (RFC2152) conversion
if ($to == 'UTF7-IMAP' || $to == 'UTF-7') {
if ($_str = utf8_to_utf7($str))
- $str = $_str;
- else
- $error = true;
+ return $_str;
}
else if ($to == 'ISO-8859-1' && function_exists('utf8_decode')) {
return utf8_decode($str);
}
- else if ($to != 'UTF-8' && $conv) {
- $to = preg_replace(array('/^WINDOWS-*125([0-8])$/', '/^CP-/'), array('CP125\\1', 'CP'), $to);
- $conv->loadCharset($to);
- return $conv->utf8ToStr($str);
- }
- else if ($to != 'UTF-8') {
- $error = true;
+ else if (class_exists('utf8')) {
+ if (!$conv)
+ $conv = new utf8($to);
+ else
+ $conv->loadCharset($from);
+
+ if ($_str = $conv->strToUtf8($str))
+ return $_str;
}
+ $error = true;
}
// report error
- if ($error && !$convert_warning){
+ if ($error && !$convert_warning) {
raise_error(array(
'code' => 500,
'type' => 'php',
'file' => __FILE__,
+ 'line' => __LINE__,
'message' => "Could not convert string from $from to $to. Make sure iconv/mbstring is installed or lib/utf8.class is available."
), true, false);
$convert_warning = true;
}
- // return UTF-8 string
+ // return UTF-8 or original string
return $str;
}