-
- /**
- * json_encode의 대체 기능
- * bbs.it-home.org 편집
- */
- function jsonEncode($var) {
- if (function_exists('json_encode' )) {
- return json_encode($var);
- } else {
- 스위치 (gettype($var)) {
- case 'boolean':
- return $var ? '참' : '거짓'; // 소문자 필수!
- 케이스 '정수':
- 케이스 '더블':
- return $var;
- 케이스 '리소스':
- 케이스 '문자열':
- return '"'.str_replace(array("r", "n", "<", ">", "&") ,
- array('r', 'n', 'x3c', 'x3e', 'x26'),
- addlashes($var)) .'"';
- case 'array':
- // JSON의 배열은 연관될 수 없습니다. 배열이 비어 있거나
- // 0으로 시작하는 연속적인 정수 키가 있는 경우에는 연관이 없습니다.
- // 계속해서 배열로 변환할 수 있습니다.
- if (emptyempty ($var) || array_keys($var) === range(0, sizeof($var) - 1)) {
- $output = array();
- foreach ($var as $v) {
- $output[] = jsonEncode($v);
- }
- '['을 반환합니다. implode(', ', $output) .' ]';
- }
- // 그렇지 않으면 배열을 객체로 변환하는 데 실패합니다.
- 케이스 '객체':
- $output = array();
- foreach ($var as $k => $v) {
- $output[] = jsonEncode(strval($k)) .': '. jsonEncode($v);
- }
- '{'를 반환합니다. implode(', ', $output) .' }';
- 기본값:
- 'null'을 반환합니다.
- }
- }
- }
-
- echo jsonEncode(array('first'=>'testing','second'=>'tangjili'));
- ?>
复代代码
也可以是下面这样的代码。
-
- function php_json_encode( $data ) {
- if( is_array($data) || is_object($data) ) {
- $islist = is_array($data) && (emptyempty($data) || array_keys($data) === range(0,count($data)-1) );
- if( $islist ) $json = '[' . implode(',', array_map('php_json_encode', $data) ) . ']';
- else {
- $items = Array();
- foreach( $data as $key => $value ) $items[] = php_json_encode("$key") . ':' . php_json_encode($value);
- $json = '{' . implode(',', $items) . '}';
- }
- } elseif( is_string($data) ) {
- $string = '"' . addcslashes($data, "\"nrt/" . chr(8) . chr(12)) . '"';
-
- $json = '';
- $len = strlen($string);
- for( $i = 0; $i < $len; $i ) {
- $char = $string[$i];
-
- $c1 = ord($char)
- if( $c1 <128 ) { $json .= ($c1 > 31) ? $char : sprintf("\u x", $c1); 계속; }
- $c2 = ord($string[ $i])
- if (($c1 & 32) === 0 ) { $json .= sprintf("\u x", ($c1 - 192) * 64 $c2 - 128) }
- $c3 = ord($string[ $i]); 🎜> if( ($c1 & 16) === 0 ) { $json .= sprintf("\u x", (($c1 - 224) <<12) (($c2 - 128) < ;< 6) ($c3 - 128)); 계속; }
- $c4 = ord($string[ $i])
- if( ($c1 & 8 ) === 0 ) 🎜> $u = (($c1 & 15) << 2) (($c2>>4) & 3) - 1
- $w1 = (54<<10) ($u< <6) (($c2 & 15) << 2) (($c3>>4) & 3)
- $w2 = (55<10) (($c3 & 15) <<6) ($c4-128);
- $json .= sprintf("\u x\u x", $w1, $w2);
- }
- }
- }
- else $json = strtolower(var_export( $data, true ));
-
- $json을 반환합니다.
- }
- echo php_json_encode(array('first'=>'testing'));
- ?>
-
-
复代码
중국어의 경우 다음 기능과 조합하여 사용할 수 있습니다.
-
- function arrayRecursive(&$array, $function, $apply_to_keys_ also = false)
- {
- foreach ($ $key => $value) {
- if (is_array($value)) arrayRecursive($array[$key], $function, $apply_to_keys_ also)
- else $array[$key] = $ function($value);
-
- if ($apply_to_keys_ also && is_string($key)) { $new_key = $function($key); if ($new_key != $key) { $array[$new_key] = $array[$key]; unset($array[$key]); } }
- }
- }
- ?>
코드 복사
통화 예시:
-
- function JSON($array) {
- arrayRecursive($array, 'urlencode', true)
- $json = jsonEncode($array); // 또는 $json = php_json_encode($array);
- return urldecode($json);
-
- echo JSON('first'= >'테스트','두 번째'=>'중국어'));
- ?>
-
코드 복사
|