>  기사  >  백엔드 개발  >  PHP json_encode() 함수 소개

PHP json_encode() 함수 소개

巴扎黑
巴扎黑원래의
2016-12-01 09:41:111813검색

PHP(php > 5.2)에 내장된 json_encode() 함수를 사용하면 PHP의 데이터를 다른 언어로 전송하고 사용할 수 있습니다.
이 함수의 기능은 숫자 값을 json 데이터 저장 형식으로 변환하는 것입니다.

PHP 코드

<?php  
$arr = array  
       (  
          &#39;Name&#39;=>&#39;希亚&#39;,  
          &#39;Age&#39;=>20  
       );  
$jsonencode = json_encode($arr);  
echo $jsonencode;  
?>

프로그램 실행 결과는 다음과 같습니다.

{"Name":null,"Age":20}

json_encode 함수에 중국어가 인코딩되어 있습니다. Google에서는 매우 간단하게 프런트 엔드와 긴밀하게 통합하기 위해 Json이 utf-8 인코딩만 지원하는 것이 프런트 엔드 Javascript도 utf-8인 이유라고 생각합니다.

<?php  
$array = array  
    (  
        &#39;title&#39;=>iconv(&#39;gb2312&#39;,&#39;utf-8&#39;,&#39;这里是中文标题&#39;),  
        &#39;body&#39;=>&#39;abcd...&#39;  
    );  
echo json_encode($array);  
?>

이 프로그램의 실행 결과는 다음과 같습니다.

Js 코드

{"title":"\u8fd9\u91cc\u662f\u4e2d\u6587\u6807\u9898","body":"abcd..."}

배열의 모든 한자가 사라집니다. json_encode 또는 u2353 등이 나타납니다.
해결책은 urlencode() 함수를 사용하여 다음을 처리하는 것입니다. json_encode 이전에 urlencode()를 사용하여 모든 배열의 내용을 모두 처리한 다음 json_encode()를 사용하여 json 문자열로 변환하고 마지막으로 사용하는 것입니다. urldecode()는 인코딩된 중국어를 다시 변환합니다.

Php 코드

<?php  
/************************************************************** 
 * 
 *  使用特定function对数组中所有元素做处理 
 *  @param  string  &$array     要处理的字符串 
 *  @param  string  $function   要执行的函数 
 *  @return boolean $apply_to_keys_also     是否也应用到key上 
 *  @access public 
 * 
 *************************************************************/  
function arrayRecursive(&$array, $function, $apply_to_keys_also = false)  
{  
    static $recursive_counter = 0;  
    if (++$recursive_counter > 1000) {  
        die(&#39;possible deep recursion attack&#39;);  
    }  
    foreach ($array as $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]);  
            }  
        }  
    }  
    $recursive_counter--;  
}  
   
/************************************************************** 
 * 
 *  将数组转换为JSON字符串(兼容中文) 
 *  @param  array   $array      要转换的数组 
 *  @return string      转换得到的json字符串 
 *  @access public 
 * 
 *************************************************************/  
function JSON($array) {  
    arrayRecursive($array, &#39;urlencode&#39;, true);  
    $json = json_encode($array);  
    return urldecode($json);  
}  
  
$array = array  
       (  
          &#39;Name&#39;=>&#39;希亚&#39;,  
          &#39;Age&#39;=>20  
       );  
  
  
echo JSON($array);  
?>

이번에 성공해서 실행 결과는 다음과 같습니다.

Js 코드

{"Name":"希亚","Age":"20"}


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.