Zeile 2 | Zeile 2 |
---|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
| // Disallow direct access to this file for security reasons if(!defined("IN_MYBB")) { die("Direct initialization of this file is not allowed.<br /><br />Please make sure IN_MYBB is defined."); }
|
/** * Converts to and from JSON format.
| /** * Converts to and from JSON format.
|
Zeile 153 | Zeile 159 |
---|
return mb_convert_encoding($utf16, 'UTF-8', 'UTF-16'); }
|
return mb_convert_encoding($utf16, 'UTF-8', 'UTF-16'); }
|
$bytes = (ord($utf16{0}) << 8) | ord($utf16{1});
| $bytes = (ord($utf16[0]) << 8) | ord($utf16[1]);
|
switch(true) { case ((0x7F & $bytes) == $bytes):
| switch(true) { case ((0x7F & $bytes) == $bytes):
|
Zeile 206 | Zeile 212 |
---|
case 2: // return a UTF-16 character from a 2-byte UTF-8 char // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
case 2: // return a UTF-16 character from a 2-byte UTF-8 char // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
return chr(0x07 & (ord($utf8{0}) >> 2)) . chr((0xC0 & (ord($utf8{0}) << 6)) | (0x3F & ord($utf8{1})));
| return chr(0x07 & (ord($utf8[0]) >> 2)) . chr((0xC0 & (ord($utf8[0]) << 6)) | (0x3F & ord($utf8[1])));
|
case 3: // return a UTF-16 character from a 3-byte UTF-8 char // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
case 3: // return a UTF-16 character from a 3-byte UTF-8 char // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
return chr((0xF0 & (ord($utf8{0}) << 4)) | (0x0F & (ord($utf8{1}) >> 2))) . chr((0xC0 & (ord($utf8{1}) << 6)) | (0x7F & ord($utf8{2})));
| return chr((0xF0 & (ord($utf8[0]) << 4)) | (0x0F & (ord($utf8[1]) >> 2))) . chr((0xC0 & (ord($utf8[1]) << 6)) | (0x7F & ord($utf8[2])));
|
}
// ignoring UTF-32 for now, sorry
| }
// ignoring UTF-32 for now, sorry
|
Zeile 261 | Zeile 267 |
---|
*/ for ($c = 0; $c < $strlen_var; ++$c) {
|
*/ for ($c = 0; $c < $strlen_var; ++$c) {
|
$ord_var_c = ord($var{$c});
| $ord_var_c = ord($var[$c]);
|
switch (true) { case $ord_var_c == 0x08:
| switch (true) { case $ord_var_c == 0x08:
|
Zeile 284 | Zeile 290 |
---|
case $ord_var_c == 0x2F: case $ord_var_c == 0x5C: // double quote, slash, slosh
|
case $ord_var_c == 0x2F: case $ord_var_c == 0x5C: // double quote, slash, slosh
|
$ascii .= '\\'.$var{$c};
| $ascii .= '\\'.$var[$c];
|
break;
case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)): // characters U-00000000 - U-0000007F (same as ASCII)
|
break;
case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)): // characters U-00000000 - U-0000007F (same as ASCII)
|
$ascii .= $var{$c};
| $ascii .= $var[$c];
|
break;
case (($ord_var_c & 0xE0) == 0xC0): // characters U-00000080 - U-000007FF, mask 110XXXXX // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
break;
case (($ord_var_c & 0xE0) == 0xC0): // characters U-00000080 - U-000007FF, mask 110XXXXX // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
$char = pack('C*', $ord_var_c, ord($var{$c + 1}));
| $char = pack('C*', $ord_var_c, ord($var[$c + 1]));
|
$c += 1; $utf16 = $this->utf82utf16($char); $ascii .= sprintf('\u%04s', bin2hex($utf16));
| $c += 1; $utf16 = $this->utf82utf16($char); $ascii .= sprintf('\u%04s', bin2hex($utf16));
|
Zeile 305 | Zeile 311 |
---|
// characters U-00000800 - U-0000FFFF, mask 1110XXXX // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 $char = pack('C*', $ord_var_c,
|
// characters U-00000800 - U-0000FFFF, mask 1110XXXX // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 $char = pack('C*', $ord_var_c,
|
ord($var{$c + 1}), ord($var{$c + 2}));
| ord($var[$c + 1]), ord($var[$c + 2]));
|
$c += 2; $utf16 = $this->utf82utf16($char); $ascii .= sprintf('\u%04s', bin2hex($utf16));
| $c += 2; $utf16 = $this->utf82utf16($char); $ascii .= sprintf('\u%04s', bin2hex($utf16));
|
Zeile 316 | Zeile 322 |
---|
// characters U-00010000 - U-001FFFFF, mask 11110XXX // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 $char = pack('C*', $ord_var_c,
|
// characters U-00010000 - U-001FFFFF, mask 11110XXX // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 $char = pack('C*', $ord_var_c,
|
ord($var{$c + 1}), ord($var{$c + 2}), ord($var{$c + 3}));
| ord($var[$c + 1]), ord($var[$c + 2]), ord($var[$c + 3]));
|
$c += 3; $utf16 = $this->utf82utf16($char); $ascii .= sprintf('\u%04s', bin2hex($utf16));
| $c += 3; $utf16 = $this->utf82utf16($char); $ascii .= sprintf('\u%04s', bin2hex($utf16));
|
Zeile 328 | Zeile 334 |
---|
// characters U-00200000 - U-03FFFFFF, mask 111110XX // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 $char = pack('C*', $ord_var_c,
|
// characters U-00200000 - U-03FFFFFF, mask 111110XX // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 $char = pack('C*', $ord_var_c,
|
ord($var{$c + 1}), ord($var{$c + 2}), ord($var{$c + 3}), ord($var{$c + 4}));
| ord($var[$c + 1]), ord($var[$c + 2]), ord($var[$c + 3]), ord($var[$c + 4]));
|
$c += 4; $utf16 = $this->utf82utf16($char); $ascii .= sprintf('\u%04s', bin2hex($utf16));
| $c += 4; $utf16 = $this->utf82utf16($char); $ascii .= sprintf('\u%04s', bin2hex($utf16));
|
Zeile 341 | Zeile 347 |
---|
// characters U-04000000 - U-7FFFFFFF, mask 1111110X // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 $char = pack('C*', $ord_var_c,
|
// characters U-04000000 - U-7FFFFFFF, mask 1111110X // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 $char = pack('C*', $ord_var_c,
|
ord($var{$c + 1}), ord($var{$c + 2}), ord($var{$c + 3}), ord($var{$c + 4}), ord($var{$c + 5}));
| ord($var[$c + 1]), ord($var[$c + 2]), ord($var[$c + 3]), ord($var[$c + 4]), ord($var[$c + 5]));
|
$c += 5; $utf16 = $this->utf82utf16($char); $ascii .= sprintf('\u%04s', bin2hex($utf16));
| $c += 5; $utf16 = $this->utf82utf16($char); $ascii .= sprintf('\u%04s', bin2hex($utf16));
|
Zeile 520 | Zeile 526 |
---|
for ($c = 0; $c < $strlen_chrs; ++$c) {
$substr_chrs_c_2 = substr($chrs, $c, 2);
|
for ($c = 0; $c < $strlen_chrs; ++$c) {
$substr_chrs_c_2 = substr($chrs, $c, 2);
|
$ord_chrs_c = ord($chrs{$c});
| $ord_chrs_c = ord($chrs[$c]);
|
switch (true) { case $substr_chrs_c_2 == '\b':
| switch (true) { case $substr_chrs_c_2 == '\b':
|
Zeile 550 | Zeile 556 |
---|
case $substr_chrs_c_2 == '\\/': if (($delim == '"' && $substr_chrs_c_2 != '\\\'') || ($delim == "'" && $substr_chrs_c_2 != '\\"')) {
|
case $substr_chrs_c_2 == '\\/': if (($delim == '"' && $substr_chrs_c_2 != '\\\'') || ($delim == "'" && $substr_chrs_c_2 != '\\"')) {
|
$utf8 .= $chrs{++$c};
| $utf8 .= $chrs[++$c];
|
} break;
| } break;
|
Zeile 563 | Zeile 569 |
---|
break;
case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F):
|
break;
case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F):
|
$utf8 .= $chrs{$c};
| $utf8 .= $chrs[$c];
|
break;
case ($ord_chrs_c & 0xE0) == 0xC0:
| break;
case ($ord_chrs_c & 0xE0) == 0xC0:
|
Zeile 610 | Zeile 616 |
---|
} elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) { // array, or object notation
|
} elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) { // array, or object notation
|
if ($str{0} == '[') {
| if ($str[0] == '[') {
|
$stk = array(SERVICES_JSON_IN_ARR); $arr = array(); } else {
| $stk = array(SERVICES_JSON_IN_ARR); $arr = array(); } else {
|
Zeile 649 | Zeile 655 |
---|
$top = end($stk); $substr_chrs_c_2 = substr($chrs, $c, 2);
|
$top = end($stk); $substr_chrs_c_2 = substr($chrs, $c, 2);
|
if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == SERVICES_JSON_SLICE))) {
| if (($c == $strlen_chrs) || (($chrs[$c] == ',') && ($top['what'] == SERVICES_JSON_SLICE))) {
|
// found a comma that is not inside a string, array, etc., // OR we've reached the end of the character list $slice = substr($chrs, $top['where'], ($c - $top['where']));
| // found a comma that is not inside a string, array, etc., // OR we've reached the end of the character list $slice = substr($chrs, $top['where'], ($c - $top['where']));
|
Zeile 691 | Zeile 697 |
---|
}
|
}
|
} elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && ($top['what'] != SERVICES_JSON_IN_STR)) {
| } elseif ((($chrs[$c] == '"') || ($chrs[$c] == "'")) && ($top['what'] != SERVICES_JSON_IN_STR)) {
|
// found a quote, and we are not inside a string
|
// found a quote, and we are not inside a string
|
array_push($stk, array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c}));
| array_push($stk, array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs[$c]));
|
//print("Found start of string at {$c}\n");
|
//print("Found start of string at {$c}\n");
|
} elseif (($chrs{$c} == $top['delim']) &&
| } elseif (($chrs[$c] == $top['delim']) &&
|
($top['what'] == SERVICES_JSON_IN_STR) && ((strlen(substr($chrs, 0, $c)) - strlen(rtrim(substr($chrs, 0, $c), '\\'))) % 2 != 1)) { // found a quote, we're in a string, and it's not escaped
| ($top['what'] == SERVICES_JSON_IN_STR) && ((strlen(substr($chrs, 0, $c)) - strlen(rtrim(substr($chrs, 0, $c), '\\'))) % 2 != 1)) { // found a quote, we're in a string, and it's not escaped
|
Zeile 705 | Zeile 711 |
---|
array_pop($stk); //print("Found end of string at {$c}: ".substr($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n");
|
array_pop($stk); //print("Found end of string at {$c}: ".substr($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n");
|
} elseif (($chrs{$c} == '[') &&
| } elseif (($chrs[$c] == '[') &&
|
in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { // found a left-bracket, and we are in an array, object, or slice array_push($stk, array('what' => SERVICES_JSON_IN_ARR, 'where' => $c, 'delim' => false)); //print("Found start of array at {$c}\n");
|
in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { // found a left-bracket, and we are in an array, object, or slice array_push($stk, array('what' => SERVICES_JSON_IN_ARR, 'where' => $c, 'delim' => false)); //print("Found start of array at {$c}\n");
|
} elseif (($chrs{$c} == ']') && ($top['what'] == SERVICES_JSON_IN_ARR)) {
| } elseif (($chrs[$c] == ']') && ($top['what'] == SERVICES_JSON_IN_ARR)) {
|
// found a right-bracket, and we're in an array array_pop($stk); //print("Found end of array at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
|
// found a right-bracket, and we're in an array array_pop($stk); //print("Found end of array at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
|
} elseif (($chrs{$c} == '{') &&
| } elseif (($chrs[$c] == '{') &&
|
in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { // found a left-brace, and we are in an array, object, or slice array_push($stk, array('what' => SERVICES_JSON_IN_OBJ, 'where' => $c, 'delim' => false)); //print("Found start of object at {$c}\n");
|
in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { // found a left-brace, and we are in an array, object, or slice array_push($stk, array('what' => SERVICES_JSON_IN_OBJ, 'where' => $c, 'delim' => false)); //print("Found start of object at {$c}\n");
|
} elseif (($chrs{$c} == '}') && ($top['what'] == SERVICES_JSON_IN_OBJ)) {
| } elseif (($chrs[$c] == '}') && ($top['what'] == SERVICES_JSON_IN_OBJ)) {
|
// found a right-brace, and we're in an object array_pop($stk); //print("Found end of object at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
| // found a right-brace, and we're in an object array_pop($stk); //print("Found end of object at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
|
Zeile 803 | Zeile 809 |
---|
}
|
}
|
function json_encode($var)
| if(!function_exists('json_encode'))
|
{
|
{
|
$JSON = new Services_JSON; return $JSON->encode($var);
| function json_encode($var) { $JSON = new Services_JSON; return $JSON->encode($var); }
|
}
|
}
|
function json_decode($var)
| if(!function_exists('json_decode'))
|
{
|
{
|
$JSON = new Services_JSON; return $JSON->decode($var);
| function json_decode($var) { $JSON = new Services_JSON; return $JSON->decode($var); }
|
}
| }
|