summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralecpl <alec@alec.pl>2009-12-11 16:53:54 +0000
committeralecpl <alec@alec.pl>2009-12-11 16:53:54 +0000
commit2717f9f68e74277379c065d32bd0771976e49c86 (patch)
treef53fee8d67b8cac77e00e0ced33f538f5eb228d2
parentf47e2dc5ea51853ade73565261db43f36ceeee92 (diff)
- use proper unicode cleanup for JSON, fixes #1486356
-rw-r--r--program/include/rcube_json_output.php6
-rw-r--r--program/include/rcube_shared.inc17
-rwxr-xr-xprogram/include/rcube_template.php4
-rw-r--r--program/steps/mail/compose.inc2
-rw-r--r--program/steps/mail/func.inc5
-rw-r--r--program/steps/mail/headers.inc5
6 files changed, 23 insertions, 16 deletions
diff --git a/program/include/rcube_json_output.php b/program/include/rcube_json_output.php
index cb8a7dbf4..080bab631 100644
--- a/program/include/rcube_json_output.php
+++ b/program/include/rcube_json_output.php
@@ -239,7 +239,7 @@ class rcube_json_output
if (!empty($this->callbacks))
$response['callbacks'] = $this->callbacks;
- echo json_encode($response);
+ echo json_serialize($response);
}
@@ -251,11 +251,11 @@ class rcube_json_output
private function get_js_commands()
{
$out = '';
-
+
foreach ($this->commands as $i => $args) {
$method = array_shift($args);
foreach ($args as $i => $arg) {
- $args[$i] = json_encode($arg);
+ $args[$i] = json_serialize($arg);
}
$out .= sprintf(
diff --git a/program/include/rcube_shared.inc b/program/include/rcube_shared.inc
index f4c6f7126..547174b8a 100644
--- a/program/include/rcube_shared.inc
+++ b/program/include/rcube_shared.inc
@@ -510,7 +510,7 @@ function rc_utf8_clean($input)
if (!is_string($input) || $input == '')
return $input;
-
+
// iconv/mbstring are much faster (especially with long strings)
if (function_exists('mb_convert_encoding') && ($res = mb_convert_encoding($input, 'UTF8', 'UTF8')))
return $res;
@@ -563,6 +563,21 @@ function rc_utf8_clean($input)
return $out;
}
+
+/**
+ * Convert a variable into a javascript object notation
+ *
+ * @param mixed Input value
+ * @return string Serialized JSON string
+ */
+function json_serialize($input)
+{
+ $input = rc_utf8_clean($input);
+
+ return json_encode($input);
+}
+
+
/**
* Explode quoted string
*
diff --git a/program/include/rcube_template.php b/program/include/rcube_template.php
index 19f2d430b..5226f8db8 100755
--- a/program/include/rcube_template.php
+++ b/program/include/rcube_template.php
@@ -414,12 +414,12 @@ class rcube_template extends rcube_html_page
{
$out = '';
if (!$this->framed && !empty($this->js_env)) {
- $out .= JS_OBJECT_NAME . '.set_env('.json_encode($this->js_env).");\n";
+ $out .= JS_OBJECT_NAME . '.set_env('.json_serialize($this->js_env).");\n";
}
foreach ($this->js_commands as $i => $args) {
$method = array_shift($args);
foreach ($args as $i => $arg) {
- $args[$i] = json_encode($arg);
+ $args[$i] = json_serialize($arg);
}
$parent = $this->framed || preg_match('/^parent\./', $method);
$out .= sprintf(
diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc
index 842f28c60..560142b90 100644
--- a/program/steps/mail/compose.inc
+++ b/program/steps/mail/compose.inc
@@ -505,7 +505,7 @@ function rcmail_compose_body($attrib)
JQ(Q(rcube_label('close'))),
JQ(Q(rcube_label('revertto'))),
JQ(Q(rcube_label('nospellerrors'))),
- json_encode($spellcheck_langs),
+ json_serialize($spellcheck_langs),
$lang,
$attrib['id'],
JS_OBJECT_NAME), 'foot');
diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index 94f455a1b..b874817ff 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -458,9 +458,6 @@ function rcmail_js_message_list($a_headers, $insert_top=FALSE, $replace=TRUE)
if ($header->flagged)
$a_msg_flags['flagged'] = 1;
- if ($browser->ie)
- $a_msg_cols = rc_utf8_clean($a_msg_cols);
-
$OUTPUT->command('add_message_row',
$header->uid,
$a_msg_cols,
@@ -522,7 +519,7 @@ function rcmail_quota_display($attrib)
if (is_array($quota)) {
$OUTPUT->add_script('$(document).ready(function(){
- rcmail.set_quota('.json_encode($quota).')});', 'foot');
+ rcmail.set_quota('.json_serialize($quota).')});', 'foot');
$quota = '';
}
diff --git a/program/steps/mail/headers.inc b/program/steps/mail/headers.inc
index 4e3f969bd..653fb9647 100644
--- a/program/steps/mail/headers.inc
+++ b/program/steps/mail/headers.inc
@@ -24,11 +24,6 @@ if ($uid = get_input_value('_uid', RCUBE_INPUT_POST))
if ($source)
{
- $browser = new rcube_browser;
-
- if ($browser->ie)
- $source = rc_utf8_clean($source);
-
$source = htmlspecialchars(trim($source));
$source = preg_replace('/\t/', '&nbsp;&nbsp;&nbsp;&nbsp;', $source);
$source = preg_replace('/^([a-z0-9_:-]+)/im', '<font class="bold">'.'\1'.'</font>', $source);