$size) { $key = str_pad(pack($pack, $algo($key)), $size, chr(0x00)); } else { $key = str_pad($key, $size, chr(0x00)); } $keyLastPos = strlen($key) - 1; for ($i = 0; $i < $keyLastPos; $i++) { $opad[$i] = $opad[$i] ^ $key[$i]; $ipad[$i] = $ipad[$i] ^ $key[$i]; } $output = $algo($opad.pack($pack, $algo($ipad.$data))); return ($raw_output) ? pack($pack, $output) : $output; } /** * Note that we discard the options given to be compatible * with PHP < 5.3 * * @param mixed $value * @param int $options * @param int $depth Set the maximum depth * @return string */ public static function json_encode($value, $options = 0, $depth = 512) { if (function_exists('json_encode')) { if (PHP_VERSION_ID < 50300) { return json_encode($value); } elseif (PHP_VERSION_ID < 50500) { return json_encode($value, $options); } else { return json_encode($value, $options, $depth); } } // @codeCoverageIgnoreStart return self::_json_encode($value, $depth); // @codeCoverageIgnoreEnd } /** * @param mixed $value * @param int $depth Set the maximum depth * @return string|false */ public static function _json_encode($value, $depth = 513) { if (ini_get('xdebug.extended_info') !== false) { ini_set('xdebug.max_nesting_level', 2048); } return self::_json_encode_lowlevel($value, $depth); } /** * Implementation taken from * http://www.mike-griffiths.co.uk/php-json_encode-alternative/ * * @param mixed $value * @param int $depth Set the maximum depth * @return string|false */ private static function _json_encode_lowlevel($value, $depth) { static $jsonReplaces = array( array('\\', '/', "\n", "\t", "\r", "\f", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\f', '\"')); if (is_null($value)) { return 'null'; } if ($value === false) { return 'false'; } if ($value === true) { return 'true'; } if (is_scalar($value)) { // Always use '.' for floats. if (is_float($value)) { return floatval(str_replace(',', '.', strval($value))); } if (is_string($value)) { return sprintf('"%s"', str_replace($jsonReplaces[0], $jsonReplaces[1], $value)); } else { return $value; } } elseif ($depth <= 1) { return false; } $isList = true; for ($i = 0, reset($value); $i $v) { $this_value = self::_json_encode($v, $depth - 1); if ($this_value === false) { return false; } $result[] = self::_json_encode($k, $depth - 1).':'.$this_value; } return '{' . join(',', $result) . '}'; } } }