diff options
author | alecpl <alec@alec.pl> | 2009-12-11 16:53:54 +0000 |
---|---|---|
committer | alecpl <alec@alec.pl> | 2009-12-11 16:53:54 +0000 |
commit | 2717f9f68e74277379c065d32bd0771976e49c86 (patch) | |
tree | f53fee8d67b8cac77e00e0ced33f538f5eb228d2 /program | |
parent | f47e2dc5ea51853ade73565261db43f36ceeee92 (diff) |
- use proper unicode cleanup for JSON, fixes #1486356
Diffstat (limited to 'program')
-rw-r--r-- | program/include/rcube_json_output.php | 6 | ||||
-rw-r--r-- | program/include/rcube_shared.inc | 17 | ||||
-rwxr-xr-x | program/include/rcube_template.php | 4 | ||||
-rw-r--r-- | program/steps/mail/compose.inc | 2 | ||||
-rw-r--r-- | program/steps/mail/func.inc | 5 | ||||
-rw-r--r-- | program/steps/mail/headers.inc | 5 |
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/', ' ', $source); $source = preg_replace('/^([a-z0-9_:-]+)/im', '<font class="bold">'.'\1'.'</font>', $source); |