$v) { unset($process[$key][$k]); if (is_array($v)) { $process[$key][stripslashes($k)] = $v; $process[] = &$process[$key][stripslashes($k)]; } else { $process[$key][stripslashes($k)] = ($filter ? $v : stripslashes($v)); } } } } } /** Escape or unescape string to use inside form [] * @param string * @param bool * @return string */ function bracket_escape($idf, $back = false) { // escape brackets inside name="x[]" static $trans = array(':' => ':1', ']' => ':2', '[' => ':3'); return strtr($idf, ($back ? array_flip($trans) : $trans)); } /** Escape for HTML * @param string * @return string */ function h($string) { return htmlspecialchars(str_replace("\0", "", $string), ENT_QUOTES); } /** Escape for TD * @param string * @return string */ function nbsp($string) { return (trim($string) != "" ? h($string) : " "); } /** Convert \n to * @param string * @return string */ function nl_br($string) { return str_replace("\n", "", $string); // nl2br() uses XHTML before PHP 5.3 } /** Generate HTML checkbox * @param string * @param string * @param bool * @param string * @param string * @param string * @return string */ function checkbox($name, $value, $checked, $label = "", $onclick = "", $class = "") { $return = "" ; return ($label != "" || $class ? "$return" . h($label) . "" : $return); } /** Generate list of HTML options * @param array array of strings or arrays (creates optgroup) * @param mixed * @param bool always use array keys for value="", otherwise only string keys are used * @return string */ function optionlist($options, $selected = null, $use_keys = false) { $return = ""; foreach ($options as $k => $v) { $opts = array($k => $v); if (is_array($v)) { $return .= ''; $opts = $v; } foreach ($opts as $key => $val) { $return .= '' . h($val); } if (is_array($v)) { $return .= ''; } } return $return; } /** Generate HTML radio list * @param string * @param array * @param string * @param string true for no onchange, false for radio * @return string */ function html_select($name, $options, $value = "", $onchange = true) { if ($onchange) { return "" . optionlist($options, $value) . ""; } $return = ""; foreach ($options as $key => $val) { $return .= "" . h($val) . ""; } return $return; } /** Generate HTML or if $options are empty * @param string * @param array * @param string * @param string * @return string */ function select_input($attrs, $options, $value = "", $placeholder = "") { return ($options ? "$placeholder" . optionlist($options, $value, true) . "" : "" ); } /** Get onclick confirmation * @return string */ function confirm() { return " onclick=\"return confirm('" . lang('Are you sure?') . "');\""; } /** Print header for hidden fieldset (close by ) * @param string * @param string * @param bool * @param string * @return null */ function print_fieldset($id, $legend, $visible = false, $onclick = "") { echo "$legend\n"; } /** Return class='active' if $bold is true * @param bool * @param string * @return string */ function bold($bold, $class = "") { return ($bold ? " class='active $class'" : ($class ? " class='$class'" : "")); } /** Generate class for odd rows * @param string return this for odd rows, empty to reset counter * @return string */ function odd($return = ' class="odd"') { static $i = 0; if (!$return) { // reset counter $i = -1; } return ($i++ % 2 ? $return : ''); } /** Escape string for JavaScript apostrophes * @param string * @return string */ function js_escape($string) { return addcslashes($string, "\r\n'\\/"); // slash for clearTimeout(timeout);\n"; ob_flush(); flush(); } return array_keys($return); } /** Generate BREACH resistant CSRF token * @return string */ function get_token() { $rand = rand(1, 1e6); return ($rand ^ $_SESSION["token"]) . ":$rand"; } /** Verify if supplied CSRF token is valid * @return bool */ function verify_token() { list($token, $rand) = explode(":", $_POST["token"]); return ($rand ^ $_SESSION["token"]) == $token; } // used in compiled version function lzw_decompress($binary) { // convert binary string to codes $dictionary_count = 256; $bits = 8; // ceil(log($dictionary_count, 2)) $codes = array(); $rest = 0; $rest_length = 0; for ($i=0; $i < strlen($binary); $i++) { $rest = ($rest << 8) + ord($binary[$i]); $rest_length += 8; if ($rest_length >= $bits) { $rest_length -= $bits; $codes[] = $rest >> $rest_length; $rest &= (1 << $rest_length) - 1; $dictionary_count++; if ($dictionary_count >> $bits) { $bits++; } } } // decompression $dictionary = range("\0", "\xFF"); $return = ""; foreach ($codes as $i => $code) { $element = $dictionary[$code]; if (!isset($element)) { $element = $word . $word[0]; } $return .= $element; if ($i) { $dictionary[] = $word . $element[0]; } $word = $element; } return $return; }