26 if (!function_exists(
'json_encode')) {
33 function json_encode($elements)
51 dol_syslog(
"For better performance, enable the native json in your PHP", LOG_WARNING);
54 if (is_object($elements)) {
55 foreach ($elements as $key => $value) {
59 $num = count($elements);
64 if (is_numeric(key($elements)) && key($elements) == 0) {
66 $keysofelements = array_keys($elements);
68 for ($i = 0, $last = ($num - 1); $i < $num; $i++) {
69 if (!isset($elements[$keysofelements[$i]])) {
72 if (is_array($elements[$keysofelements[$i]]) || is_object($elements[$keysofelements[$i]])) {
73 $output .= json_encode($elements[$keysofelements[$i]]);
75 $output .=
_val($elements[$keysofelements[$i]]);
87 $tmpelements = array();
88 if (is_array($elements)) {
89 $tmpelements = $elements;
91 if (is_object($elements)) {
92 $tmpelements = get_object_vars($elements);
94 foreach ($tmpelements as $key => $value) {
95 $output .=
'"'.$key.
'":';
96 if (is_array($value)) {
97 $output .= json_encode($value);
99 $output .=
_val($value);
121 if (is_string($val)) {
124 $strlen_var = strlen($val);
130 for ($c = 0; $c < $strlen_var; ++$c) {
131 $ord_var_c = ord($val[$c]);
134 case $ord_var_c == 0x08:
137 case $ord_var_c == 0x09:
140 case $ord_var_c == 0x0A:
143 case $ord_var_c == 0x0C:
146 case $ord_var_c == 0x0D:
150 case $ord_var_c == 0x22:
151 case $ord_var_c == 0x2F:
152 case $ord_var_c == 0x5C:
154 $ascii .=
'\\'.$val[$c];
157 case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
162 case (($ord_var_c & 0xE0) == 0xC0):
165 $char = pack(
'C*', $ord_var_c, ord($val[$c + 1]));
168 $ascii .= sprintf(
'\u%04s', bin2hex($utf16));
171 case (($ord_var_c & 0xF0) == 0xE0):
174 $char = pack(
'C*', $ord_var_c, ord($val[$c + 1]), ord($val[$c + 2]));
177 $ascii .= sprintf(
'\u%04s', bin2hex($utf16));
180 case (($ord_var_c & 0xF8) == 0xF0):
183 $char = pack(
'C*', $ord_var_c, ord($val[$c + 1]), ord($val[$c + 2]), ord($val[$c + 3]));
186 $ascii .= sprintf(
'\u%04s', bin2hex($utf16));
189 case (($ord_var_c & 0xFC) == 0xF8):
192 $char = pack(
'C*', $ord_var_c, ord($val[$c + 1]), ord($val[$c + 2]), ord($val[$c + 3]), ord($val[$c + 4]));
195 $ascii .= sprintf(
'\u%04s', bin2hex($utf16));
198 case (($ord_var_c & 0xFE) == 0xFC):
201 $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]));
204 $ascii .= sprintf(
'\u%04s', bin2hex($utf16));
209 return '"'.$ascii.
'"';
210 } elseif (is_int($val)) {
211 return sprintf(
'%d', $val);
212 } elseif (is_float($val)) {
213 return sprintf(
'%F', $val);
214 } elseif (is_bool($val)) {
215 return ($val ?
'true' :
'false');
221 if (!function_exists(
'json_decode')) {
229 function json_decode($json, $assoc =
false)
246 dol_syslog(
"For better performance, enable the native json in your PHP", LOG_WARNING);
251 $strLength = strlen($json);
252 for ($i = 0; $i < $strLength; $i++) {
254 if (($json[$i] ==
'{') || ($json[$i] ==
'[')) {
256 } elseif (($json[$i] ==
'}') || ($json[$i] ==
']')) {
258 } elseif ($json[$i] ==
':') {
266 if ($json[$i] ==
'"' && $json[($i - 1)] !=
"\\") {
267 $comment = !$comment;
278 eval(
'$array = '.$out.
';');
286 if (!empty($array)) {
288 if (count($array) > 0) {
289 $object = (object) array();
291 foreach ($array as $key => $value) {
293 $object->{$key} = $value;
315 while (preg_match(
'/\\\u([0-9A-F]{2})([0-9A-F]{2})/i', $val, $reg)) {
317 $utf16 = chr(hexdec($reg[1])).chr(hexdec($reg[2]));
319 $val = preg_replace(
'/\\\u'.$reg[1].$reg[2].
'/i', $utf8, $val);
337 if (function_exists(
'mb_convert_encoding')) {
338 return mb_convert_encoding($utf16,
'UTF-8',
'UTF-16');
341 $bytes = (ord($utf16[0]) << 8) | ord($utf16[1]);
344 case ((0x7F & $bytes) == $bytes):
349 case (0x07FF & $bytes) == $bytes:
352 return chr(0xC0 | (($bytes >> 6) & 0x1F))
353 . chr(0x80 | ($bytes & 0x3F));
355 case (0xFFFF & $bytes) == $bytes:
358 return chr(0xE0 | (($bytes >> 12) & 0x0F))
359 . chr(0x80 | (($bytes >> 6) & 0x3F))
360 . chr(0x80 | ($bytes & 0x3F));
380 if (function_exists(
'mb_convert_encoding')) {
381 return mb_convert_encoding($utf8,
'UTF-16',
'UTF-8');
384 switch (strlen($utf8)) {
393 return chr(0x07 & (ord($utf8[0]) >> 2)).chr((0xC0 & (ord($utf8[0]) << 6)) | (0x3F & ord($utf8[1])));
398 return chr((0xF0 & (ord($utf8[0]) << 4)) | (0x0F & (ord($utf8[1]) >> 2))).chr((0xC0 & (ord($utf8[1]) << 6)) | (0x7F & ord($utf8[2])));