Wordpress 3.5.2
[autoinstalls/wordpress.git] / wp-includes / class-json.php
index c84815c522aa5a8d63e28496aeb445721f49d779..58f6f7de2863ade31832939646d5ae2f83e163ad 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+if ( !class_exists( 'Services_JSON' ) ) :
 /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
 /**
  * Converts to and from JSON format.
@@ -50,7 +51,7 @@
  * @author             Matt Knapp <mdknapp[at]gmail[dot]com>
  * @author             Brett Stimmerman <brettstimmerman[at]gmail[dot]com>
  * @copyright  2005 Michal Migurski
- * @version            CVS: $Id: JSON.php,v 1.3 2009/05/22 23:51:00 alan_k Exp $
+ * @version     CVS: $Id: JSON.php 288200 2009-09-09 15:41:29Z alan_k $
  * @license            http://www.opensource.org/licenses/bsd-license.php
  * @link               http://pear.php.net/pepr/pepr-proposal-show.php?id=198
  */
@@ -152,7 +153,7 @@ class Services_JSON
                        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):
@@ -205,17 +206,17 @@ class Services_JSON
                        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
-                               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
@@ -235,7 +236,7 @@ class Services_JSON
        */
        function encode($var)
        {
-               header('Content-type: application/x-javascript');
+               header('Content-type: application/json');
                return $this->_encode($var);
        }
        /**
@@ -292,7 +293,7 @@ class Services_JSON
                                */
                                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:
@@ -315,12 +316,12 @@ class Services_JSON
                                                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)
-                                                       $ascii .= $var{$c};
+                                                       $ascii .= $var[$c];
                                                        break;
 
                                                case (($ord_var_c & 0xE0) == 0xC0):
@@ -332,7 +333,7 @@ class Services_JSON
                                                                break;
                                                        }
 
-                                                       $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));
@@ -347,8 +348,8 @@ class Services_JSON
                                                        // 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));
@@ -363,9 +364,9 @@ class Services_JSON
                                                        // 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));
@@ -380,10 +381,10 @@ class Services_JSON
                                                                break;
                                                        }
                                                        $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));
@@ -398,11 +399,11 @@ class Services_JSON
                                                        // 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));
@@ -576,7 +577,7 @@ class Services_JSON
                                        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':
@@ -606,7 +607,7 @@ class Services_JSON
                                                        case $substr_chrs_c_2 == '\\/':
                                                                if (($delim == '"' && $substr_chrs_c_2 != '\\\'') ||
                                                                ($delim == "'" && $substr_chrs_c_2 != '\\"')) {
-                                                                       $utf8 .= $chrs{++$c};
+                                                                       $utf8 .= $chrs[++$c];
                                                                }
                                                                break;
 
@@ -619,7 +620,7 @@ class Services_JSON
                                                                break;
 
                                                        case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F):
-                                                               $utf8 .= $chrs{$c};
+                                                               $utf8 .= $chrs[$c];
                                                                break;
 
                                                        case ($ord_chrs_c & 0xE0) == 0xC0:
@@ -666,7 +667,7 @@ class Services_JSON
                                } 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 {
@@ -705,7 +706,7 @@ class Services_JSON
                                                $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']));
@@ -747,12 +748,12 @@ class Services_JSON
 
                                                        }
 
-                                               } 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
-                                                       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");
 
-                                               } 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
@@ -761,24 +762,24 @@ class Services_JSON
                                                        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");
 
-                                               } 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");
 
-                                               } 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");
 
-                                               } 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");
@@ -858,3 +859,4 @@ if (class_exists('PEAR_Error')) {
        }
 
 }
+endif;