26 if (!function_exists(
'json_encode'))
34 function json_encode($elements)
50 dol_syslog(
"For better performance, enable the native json in your PHP", LOG_WARNING);
53 if (is_object($elements))
55 foreach ($elements as $key => $value) $num++;
57 $num = count($elements);
62 if (is_numeric(key($elements)) && key($elements) == 0)
65 $keysofelements = array_keys($elements);
67 for ($i = 0, $last = ($num - 1); $i < $num; $i++)
69 if (!isset($elements[$keysofelements[$i]]))
continue;
70 if (is_array($elements[$keysofelements[$i]]) || is_object($elements[$keysofelements[$i]])) $output .= json_encode($elements[$keysofelements[$i]]);
71 else $output .=
_val($elements[$keysofelements[$i]]);
72 if ($i !== $last) $output .=
',';
80 $tmpelements = array();
81 if (is_array($elements)) $tmpelements = $elements;
82 if (is_object($elements)) $tmpelements = get_object_vars($elements);
83 foreach ($tmpelements as $key => $value)
85 $output .=
'"'.$key.
'":';
86 if (is_array($value)) $output .= json_encode($value);
87 else $output .=
_val($value);
88 if ($i !== $last) $output .=
',';
106 if (is_string($val)) {
109 $strlen_var = strlen($val);
115 for ($c = 0; $c < $strlen_var; ++$c) {
116 $ord_var_c = ord($val[$c]);
119 case $ord_var_c == 0x08:
122 case $ord_var_c == 0x09:
125 case $ord_var_c == 0x0A:
128 case $ord_var_c == 0x0C:
131 case $ord_var_c == 0x0D:
135 case $ord_var_c == 0x22:
136 case $ord_var_c == 0x2F:
137 case $ord_var_c == 0x5C:
139 $ascii .=
'\\'.$val[$c];
142 case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
147 case (($ord_var_c & 0xE0) == 0xC0):
150 $char = pack(
'C*', $ord_var_c, ord($val[$c + 1]));
153 $ascii .= sprintf(
'\u%04s', bin2hex($utf16));
156 case (($ord_var_c & 0xF0) == 0xE0):
159 $char = pack(
'C*', $ord_var_c, ord($val[$c + 1]), ord($val[$c + 2]));
162 $ascii .= sprintf(
'\u%04s', bin2hex($utf16));
165 case (($ord_var_c & 0xF8) == 0xF0):
168 $char = pack(
'C*', $ord_var_c, ord($val[$c + 1]), ord($val[$c + 2]), ord($val[$c + 3]));
171 $ascii .= sprintf(
'\u%04s', bin2hex($utf16));
174 case (($ord_var_c & 0xFC) == 0xF8):
177 $char = pack(
'C*', $ord_var_c, ord($val[$c + 1]), ord($val[$c + 2]), ord($val[$c + 3]), ord($val[$c + 4]));
180 $ascii .= sprintf(
'\u%04s', bin2hex($utf16));
183 case (($ord_var_c & 0xFE) == 0xFC):
186 $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]));
189 $ascii .= sprintf(
'\u%04s', bin2hex($utf16));
194 return '"'.$ascii.
'"';
195 } elseif (is_int($val))
return sprintf(
'%d', $val);
196 elseif (is_float($val))
return sprintf(
'%F', $val);
197 elseif (is_bool($val))
return ($val ?
'true' :
'false');
201 if (!function_exists(
'json_decode'))
210 function json_decode($json, $assoc =
false)
227 dol_syslog(
"For better performance, enable the native json in your PHP", LOG_WARNING);
232 $strLength = strlen($json);
233 for ($i = 0; $i < $strLength; $i++)
237 if (($json[$i] ==
'{') || ($json[$i] ==
'[')) $out .=
'array(';
238 elseif (($json[$i] ==
'}') || ($json[$i] ==
']')) $out .=
')';
239 elseif ($json[$i] ==
':') $out .=
' => ';
240 else $out .= $json[$i];
241 }
else $out .= $json[$i];
242 if ($json[$i] ==
'"' && $json[($i - 1)] !=
"\\") $comment = !$comment;
252 eval(
'$array = '.$out.
';');
264 if (count($array) > 0) {
265 $object = (object) array();
267 foreach ($array as $key => $value)
269 if ($key) $object->{$key} = $value;
290 while (preg_match(
'/\\\u([0-9A-F]{2})([0-9A-F]{2})/i', $val, $reg))
293 $utf16 = chr(hexdec($reg[1])).chr(hexdec($reg[2]));
295 $val = preg_replace(
'/\\\u'.$reg[1].$reg[2].
'/i', $utf8, $val);
313 if (function_exists(
'mb_convert_encoding')) {
314 return mb_convert_encoding($utf16,
'UTF-8',
'UTF-16');
317 $bytes = (ord($utf16[0]) << 8) | ord($utf16[1]);
320 case ((0x7F & $bytes) == $bytes):
325 case (0x07FF & $bytes) == $bytes:
328 return chr(0xC0 | (($bytes >> 6) & 0x1F))
329 . chr(0x80 | ($bytes & 0x3F));
331 case (0xFFFF & $bytes) == $bytes:
334 return chr(0xE0 | (($bytes >> 12) & 0x0F))
335 . chr(0x80 | (($bytes >> 6) & 0x3F))
336 . chr(0x80 | ($bytes & 0x3F));
356 if (function_exists(
'mb_convert_encoding')) {
357 return mb_convert_encoding($utf8,
'UTF-16',
'UTF-8');
360 switch (strlen($utf8)) {
369 return chr(0x07 & (ord($utf8[0]) >> 2)).chr((0xC0 & (ord($utf8[0]) << 6)) | (0x3F & ord($utf8[1])));
374 return chr((0xF0 & (ord($utf8[0]) << 4)) | (0x0F & (ord($utf8[1]) >> 2))).chr((0xC0 & (ord($utf8[1]) << 6)) | (0x7F & ord($utf8[2])));
_val($val)
Return text according to type.
if(!function_exists('json_decode')) dol_json_decode($json, $assoc=false)
Implement json_decode for PHP that does not support it Use json_encode and json_decode in your code !...
if(!function_exists('json_encode')) dol_json_encode($elements)
Implement json_encode for PHP that does not support it.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename= '', $restricttologhandler= '', $logcontext=null)
Write log message into outputs.
utf162utf8($utf16)
Convert a string from one UTF-16 char to one UTF-8 char.
_unval($val)
Return text according to type.
utf82utf16($utf8)
Convert a string from one UTF-8 char to one UTF-16 char.