| | |
| | | */ |
| | | function rcmail_temp_gc() |
| | | { |
| | | $tmp = unslashify($CONFIG['temp_dir']); |
| | | $rcmail = rcmail::get_instance(); |
| | | |
| | | $tmp = unslashify($rcmail->config->get('temp_dir')); |
| | | $expire = mktime() - 172800; // expire in 48 hours |
| | | |
| | | if ($dir = opendir($tmp)) |
| | |
| | | |
| | | if ($from == $to || empty($str) || empty($from)) |
| | | return $str; |
| | | |
| | | |
| | | // convert charset using iconv module |
| | | if (function_exists('iconv') && $from != 'UTF-7' && $to != 'UTF-7') { |
| | | $aliases['GB2312'] = 'GB18030'; |
| | | $_iconv = iconv(($aliases[$from] ? $aliases[$from] : $from), ($aliases[$to] ? $aliases[$to] : $to) . "//IGNORE", $str); |
| | | $_iconv = iconv($from, $to . '//IGNORE', $str); |
| | | if ($_iconv !== false) { |
| | | return $_iconv; |
| | | } |
| | |
| | | $str = 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); |
| | | } |
| | |
| | | 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); |
| | | } |
| | |
| | | # RFC1642 |
| | | $charset = str_replace('UNICODE-1-1-', '', $charset); |
| | | |
| | | # Aliases: some of them from HTML5 spec. |
| | | $aliases = array( |
| | | 'USASCII' => 'ISO-8859-1', |
| | | 'ANSIX31101983' => 'ISO-8859-1', |
| | | 'ANSIX341968' => 'ISO-8859-1', |
| | | 'USASCII' => 'WINDOWS-1252', |
| | | 'ANSIX31101983' => 'WINDOWS-1252', |
| | | 'ANSIX341968' => 'WINDOWS-1252', |
| | | 'UNKNOWN8BIT' => 'ISO-8859-15', |
| | | 'XUNKNOWN' => 'ISO-8859-15', |
| | | 'XUSERDEFINED' => 'ISO-8859-15', |
| | | 'ISO88598I' => 'ISO-8859-8', |
| | | 'KSC56011987' => 'EUC-KR', |
| | | 'GB2312' => 'GBK', |
| | | 'GB231280' => 'GBK', |
| | | 'UNICODE' => 'UTF-8', |
| | | 'UTF7IMAP' => 'UTF7-IMAP' |
| | | 'UTF7IMAP' => 'UTF7-IMAP', |
| | | 'XXBIG5' => 'BIG5', |
| | | 'TIS620' => 'WINDOWS-874', |
| | | 'ISO88599' => 'WINDOWS-1254', |
| | | 'ISO885911' => 'WINDOWS-874', |
| | | ); |
| | | |
| | | $str = preg_replace('/[^a-z0-9]/i', '', $charset); |
| | |
| | | if (preg_match('/UTF(7|8|16|32)(BE|LE)*/', $str, $m)) |
| | | return 'UTF-' . $m[1] . $m[2]; |
| | | |
| | | if (preg_match('/ISO8859([0-9]{0,2})/', $str, $m)) |
| | | return 'ISO-8859-' . ($m[1] ? $m[1] : 1); |
| | | if (preg_match('/ISO8859([0-9]{0,2})/', $str, $m)) { |
| | | $iso = 'ISO-8859-' . ($m[1] ? $m[1] : 1); |
| | | # some clients sends windows-1252 text as latin1, |
| | | # it is safe to use windows-1252 for all latin1 |
| | | return $iso == 'ISO-8859-1' ? 'WINDOWS-1252' : $iso; |
| | | } |
| | | |
| | | return $charset; |
| | | } |
| | |
| | | static $js_rep_table = false; |
| | | static $xml_rep_table = false; |
| | | |
| | | $charset = rcmail::get_instance()->config->get('charset', RCMAIL_CHARSET); |
| | | $is_iso_8859_1 = false; |
| | | if ($charset == 'ISO-8859-1') { |
| | | $is_iso_8859_1 = true; |
| | | } |
| | | if (!$enctype) |
| | | $enctype = $OUTPUT->type; |
| | | |
| | | // encode for plaintext |
| | | if ($enctype=='text') |
| | | return str_replace("\r\n", "\n", $mode=='remove' ? strip_tags($str) : $str); |
| | | |
| | | // encode for HTML output |
| | | if ($enctype=='html') |
| | |
| | | return $newlines ? nl2br($out) : $out; |
| | | } |
| | | |
| | | if ($enctype=='url') |
| | | return rawurlencode($str); |
| | | |
| | | // if the replace tables for XML and JS are not yet defined |
| | | if ($js_rep_table===false) |
| | | { |
| | |
| | | $xml_rep_table['&'] = '&'; |
| | | |
| | | for ($c=160; $c<256; $c++) // can be increased to support more charsets |
| | | { |
| | | $xml_rep_table[Chr($c)] = "&#$c;"; |
| | | |
| | | if ($is_iso_8859_1) |
| | | $js_rep_table[Chr($c)] = sprintf("\\u%04x", $c); |
| | | } |
| | | |
| | | $xml_rep_table['"'] = '"'; |
| | | $js_rep_table['"'] = '\\"'; |
| | |
| | | $js_rep_table["\\"] = "\\\\"; |
| | | } |
| | | |
| | | // encode for javascript use |
| | | if ($enctype=='js') |
| | | return preg_replace(array("/\r?\n/", "/\r/", '/<\\//'), array('\n', '\n', '<\\/'), strtr($str, $js_rep_table)); |
| | | |
| | | // encode for plaintext |
| | | if ($enctype=='text') |
| | | return str_replace("\r\n", "\n", $mode=='remove' ? strip_tags($str) : $str); |
| | | |
| | | if ($enctype=='url') |
| | | return rawurlencode($str); |
| | | |
| | | // encode for XML |
| | | if ($enctype=='xml') |
| | | return strtr($str, $xml_rep_table); |
| | | |
| | | // encode for javascript use |
| | | if ($enctype=='js') |
| | | { |
| | | if ($charset!='UTF-8') |
| | | $str = rcube_charset_convert($str, RCMAIL_CHARSET, $charset); |
| | | |
| | | return preg_replace(array("/\r?\n/", "/\r/", '/<\\//'), array('\n', '\n', '<\\/'), strtr($str, $js_rep_table)); |
| | | } |
| | | |
| | | // no encoding given -> return original string |
| | | return $str; |
| | |
| | | else if (isset($_COOKIE[$fname])) |
| | | $value = $_COOKIE[$fname]; |
| | | } |
| | | |
| | | |
| | | if (empty($value)) |
| | | return $value; |
| | | |
| | | // strip single quotes if magic_quotes_sybase is enabled |
| | | if (ini_get('magic_quotes_sybase')) |
| | | $value = str_replace("''", "'", $value); |
| | |
| | | |
| | | /** |
| | | * Remove all non-ascii and non-word chars |
| | | * except . and - |
| | | * except ., -, _ |
| | | */ |
| | | function asciiwords($str, $css_id = false) |
| | | function asciiwords($str, $css_id = false, $replace_with = '') |
| | | { |
| | | $allowed = 'a-z0-9\_\-' . (!$css_id ? '\.' : ''); |
| | | return preg_replace("/[^$allowed]/i", '', $str); |
| | | return preg_replace("/[^$allowed]/i", $replace_with, $str); |
| | | } |
| | | |
| | | /** |
| | |
| | | $replacements = new rcube_string_replacer; |
| | | |
| | | // ignore the whole block if evil styles are detected |
| | | $stripped = preg_replace('/[^a-z\(:]/', '', rcmail_xss_entitiy_decode($source)); |
| | | $stripped = preg_replace('/[^a-z\(:]/', '', rcmail_xss_entity_decode($source)); |
| | | if (preg_match('/expression|behavior|url\(|import/', $stripped)) |
| | | return '/* evil! */'; |
| | | |
| | |
| | | * @param string CSS content to decode |
| | | * @return string Decoded string |
| | | */ |
| | | function rcmail_xss_entitiy_decode($content) |
| | | function rcmail_xss_entity_decode($content) |
| | | { |
| | | $out = html_entity_decode(html_entity_decode($content)); |
| | | $out = preg_replace_callback('/\\\([0-9a-f]{4})/i', 'rcmail_xss_entitiy_decode_callback', $out); |
| | | $out = preg_replace_callback('/\\\([0-9a-f]{4})/i', 'rcmail_xss_entity_decode_callback', $out); |
| | | $out = preg_replace('#/\*.*\*/#Um', '', $out); |
| | | return $out; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * preg_replace_callback callback for rcmail_xss_entitiy_decode_callback |
| | | * preg_replace_callback callback for rcmail_xss_entity_decode_callback |
| | | * |
| | | * @param array matches result from preg_replace_callback |
| | | * @return string decoded entity |
| | | */ |
| | | function rcmail_xss_entitiy_decode_callback($matches) |
| | | function rcmail_xss_entity_decode_callback($matches) |
| | | { |
| | | return chr(hexdec($matches[1])); |
| | | } |
| | |
| | | * @access private |
| | | */ |
| | | function rcube_timer() |
| | | { |
| | | list($usec, $sec) = explode(" ", microtime()); |
| | | return ((float)$usec + (float)$sec); |
| | | } |
| | | { |
| | | return microtime(true); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @access private |
| | | */ |
| | | function rcube_print_time($timer, $label='Timer') |
| | | { |
| | | { |
| | | static $print_count = 0; |
| | | |
| | | $print_count++; |
| | |
| | | $label = 'Timer '.$print_count; |
| | | |
| | | console(sprintf("%s: %0.4f sec", $label, $diff)); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | // make folder name safe for ids and class names |
| | | $folder_id = asciiwords($folder['id'], true); |
| | | $folder_id = asciiwords($folder['id'], true, '_'); |
| | | $classes = array('mailbox'); |
| | | |
| | | // set special class for Sent, Drafts, Trash and Junk |