Example #1
0
/**
 * Return text according to type
 *
 * @param 	mixed	$val	Value to show
 * @return	string			Formated value
 */
function _val($val)
{
    if (is_string($val)) {
        // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT
        $ascii = '';
        $strlen_var = strlen($val);
        /*
         * Iterate over every character in the string,
         * escaping with a slash or encoding to UTF-8 where necessary
         */
        for ($c = 0; $c < $strlen_var; ++$c) {
            $ord_var_c = ord($val[$c]);
            switch (true) {
                case $ord_var_c == 0x8:
                    $ascii .= '\\b';
                    break;
                case $ord_var_c == 0x9:
                    $ascii .= '\\t';
                    break;
                case $ord_var_c == 0xa:
                    $ascii .= '\\n';
                    break;
                case $ord_var_c == 0xc:
                    $ascii .= '\\f';
                    break;
                case $ord_var_c == 0xd:
                    $ascii .= '\\r';
                    break;
                case $ord_var_c == 0x22:
                case $ord_var_c == 0x2f:
                case $ord_var_c == 0x5c:
                    // double quote, slash, slosh
                    $ascii .= '\\' . $val[$c];
                    break;
                case $ord_var_c >= 0x20 && $ord_var_c <= 0x7f:
                    // characters U-00000000 - U-0000007F (same as ASCII)
                    $ascii .= $val[$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
                    $char = pack('C*', $ord_var_c, ord($val[$c + 1]));
                    $c += 1;
                    $utf16 = utf82utf16($char);
                    $ascii .= sprintf('\\u%04s', bin2hex($utf16));
                    break;
                case ($ord_var_c & 0xf0) == 0xe0:
                    // 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($val[$c + 1]), ord($val[$c + 2]));
                    $c += 2;
                    $utf16 = utf82utf16($char);
                    $ascii .= sprintf('\\u%04s', bin2hex($utf16));
                    break;
                case ($ord_var_c & 0xf8) == 0xf0:
                    // 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($val[$c + 1]), ord($val[$c + 2]), ord($val[$c + 3]));
                    $c += 3;
                    $utf16 = utf82utf16($char);
                    $ascii .= sprintf('\\u%04s', bin2hex($utf16));
                    break;
                case ($ord_var_c & 0xfc) == 0xf8:
                    // 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($val[$c + 1]), ord($val[$c + 2]), ord($val[$c + 3]), ord($val[$c + 4]));
                    $c += 4;
                    $utf16 = utf82utf16($char);
                    $ascii .= sprintf('\\u%04s', bin2hex($utf16));
                    break;
                case ($ord_var_c & 0xfe) == 0xfc:
                    // 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($val[$c + 1]), ord($val[$c + 2]), ord($val[$c + 3]), ord($val[$c + 4]), ord($val[$c + 5]));
                    $c += 5;
                    $utf16 = utf82utf16($char);
                    $ascii .= sprintf('\\u%04s', bin2hex($utf16));
                    break;
            }
        }
        return '"' . $ascii . '"';
    } elseif (is_int($val)) {
        return sprintf('%d', $val);
    } elseif (is_float($val)) {
        return sprintf('%F', $val);
    } elseif (is_bool($val)) {
        return $val ? 'true' : 'false';
    } else {
        return 'null';
    }
}
Example #2
0
 function json_encode($var)
 {
     switch (gettype($var)) {
         case 'boolean':
             return $var ? 'true' : 'false';
         case 'NULL':
             return 'null';
         case 'integer':
             return (int) $var;
         case 'double':
         case 'float':
             return (double) $var;
         case 'string':
             $ascii = '';
             $strlen_var = strlen($var);
             for ($c = 0; $c < $strlen_var; ++$c) {
                 $ord_var_c = ord($var[$c]);
                 switch (true) {
                     case $ord_var_c == 0x8:
                         $ascii .= '\\b';
                         break;
                     case $ord_var_c == 0x9:
                         $ascii .= '\\t';
                         break;
                     case $ord_var_c == 0xa:
                         $ascii .= '\\n';
                         break;
                     case $ord_var_c == 0xc:
                         $ascii .= '\\f';
                         break;
                     case $ord_var_c == 0xd:
                         $ascii .= '\\r';
                         break;
                     case $ord_var_c == 0x22:
                     case $ord_var_c == 0x2f:
                     case $ord_var_c == 0x5c:
                         $ascii .= '\\' . $var[$c];
                         break;
                     case $ord_var_c >= 0x20 && $ord_var_c <= 0x7f:
                         $ascii .= $var[$c];
                         break;
                     case ($ord_var_c & 0xe0) == 0xc0:
                         $char = pack('C*', $ord_var_c, ord($var[$c + 1]));
                         $c += 1;
                         $utf16 = utf82utf16($char);
                         $ascii .= sprintf('\\u%04s', bin2hex($utf16));
                         break;
                     case ($ord_var_c & 0xf0) == 0xe0:
                         $char = pack('C*', $ord_var_c, ord($var[$c + 1]), ord($var[$c + 2]));
                         $c += 2;
                         $utf16 = utf82utf16($char);
                         $ascii .= sprintf('\\u%04s', bin2hex($utf16));
                         break;
                     case ($ord_var_c & 0xf8) == 0xf0:
                         $char = pack('C*', $ord_var_c, ord($var[$c + 1]), ord($var[$c + 2]), ord($var[$c + 3]));
                         $c += 3;
                         $utf16 = utf82utf16($char);
                         $ascii .= sprintf('\\u%04s', bin2hex($utf16));
                         break;
                     case ($ord_var_c & 0xfc) == 0xf8:
                         $char = pack('C*', $ord_var_c, ord($var[$c + 1]), ord($var[$c + 2]), ord($var[$c + 3]), ord($var[$c + 4]));
                         $c += 4;
                         $utf16 = utf82utf16($char);
                         $ascii .= sprintf('\\u%04s', bin2hex($utf16));
                         break;
                     case ($ord_var_c & 0xfe) == 0xfc:
                         $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]));
                         $c += 5;
                         $utf16 = utf82utf16($char);
                         $ascii .= sprintf('\\u%04s', bin2hex($utf16));
                         break;
                 }
             }
             return '"' . $ascii . '"';
         case 'array':
             if (is_array($var) && count($var) && array_keys($var) !== range(0, sizeof($var) - 1)) {
                 $properties = array_map('json_name_value', array_keys($var), array_values($var));
                 foreach ($properties as $property) {
                     if (json_is_error($property)) {
                         return $property;
                     }
                 }
                 return '{' . join(',', $properties) . '}';
             }
             // treat it like a regular array
             $elements = array_map('json_encode', $var);
             foreach ($elements as $element) {
                 if (json_is_error($element)) {
                     return $element;
                 }
             }
             return '[' . join(',', $elements) . ']';
         case 'object':
             $vars = get_object_vars($var);
             $properties = array_map('json_name_value', array_keys($vars), array_values($vars));
             foreach ($properties as $property) {
                 if (json_is_error($property)) {
                     return $property;
                 }
             }
             return '{' . join(',', $properties) . '}';
         default:
             throw new MagikeException(E_JSONTYPE, gettype($var));
     }
 }