php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login | |
Patch json_unescaped_unicode for JSON related Bug #53946Patch version 2011-07-19 16:01 UTC Return to Bug #53946 | Download this patchThis patch is obsolete Obsoleted by patches:
Developer: irker@php.netIndex: ext/json/php_json.h =================================================================== --- ext/json/php_json.h (revision 306938) +++ ext/json/php_json.h (working copy) @@ -62,6 +62,7 @@ #define PHP_JSON_NUMERIC_CHECK (1<<5) #define PHP_JSON_UNESCAPED_SLASHES (1<<6) #define PHP_JSON_PRETTY_PRINT (1<<7) +#define PHP_JSON_UNESCAPED_UNICODE (1<<8) /* Internal flags */ #define PHP_JSON_OUTPUT_ARRAY 0 Index: ext/json/json.c =================================================================== --- ext/json/json.c (revision 311708) +++ ext/json/json.c (working copy) @@ -95,6 +95,7 @@ REGISTER_LONG_CONSTANT("JSON_NUMERIC_CHECK", PHP_JSON_NUMERIC_CHECK, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("JSON_UNESCAPED_SLASHES", PHP_JSON_UNESCAPED_SLASHES, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("JSON_PRETTY_PRINT", PHP_JSON_PRETTY_PRINT, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("JSON_UNESCAPED_UNICODE", PHP_JSON_UNESCAPED_UNICODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("JSON_ERROR_NONE", PHP_JSON_ERROR_NONE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("JSON_ERROR_DEPTH", PHP_JSON_ERROR_DEPTH, CONST_CS | CONST_PERSISTENT); @@ -347,6 +348,7 @@ static void json_escape_string(smart_str *buf, char *s, int len, int options TSRMLS_DC) /* {{{ */ { int pos = 0; + int lenutf; unsigned short us; unsigned short *utf16; @@ -381,6 +383,7 @@ utf16 = (unsigned short *) safe_emalloc(len, sizeof(unsigned short), 0); + if (options & PHP_JSON_UNESCAPED_UNICODE) lenutf = len; len = utf8_to_utf16(utf16, s, len); if (len <= 0) { if (utf16) { @@ -397,12 +400,13 @@ } return; } + if (options & PHP_JSON_UNESCAPED_UNICODE) len = lenutf; smart_str_appendc(buf, '"'); while (pos < len) { - us = utf16[pos++]; + us = (options & PHP_JSON_UNESCAPED_UNICODE) ? s[pos++] : utf16[pos++]; switch (us) { @@ -479,7 +483,7 @@ break; default: - if (us >= ' ' && (us & 127) == us) { + if (us >= ' ' && ((options & PHP_JSON_UNESCAPED_UNICODE) || (us & 127) == us)) { smart_str_appendc(buf, (unsigned char) us); } else { smart_str_appendl(buf, "\\u", 2); |
Copyright © 2001-2024 The PHP Group All rights reserved. |
Last updated: Sat Nov 23 09:01:28 2024 UTC |