>  기사  >  백엔드 개발  >  PHP의 json_encode가 GB2312 인코딩을 지원하지 않는 문제에 대한 해결 방법

PHP의 json_encode가 GB2312 인코딩을 지원하지 않는 문제에 대한 해결 방법

黄舟
黄舟원래의
2017-11-15 15:51:072418검색

이전 글에서는 PHP의 json_encode에서 중국어 UNICODE 트랜스코딩 문제를 해결하는 방법을 소개했으므로, 오늘은 PHP의 json_encode가 GB2312 인코딩을 지원하지 않는 문제를 계속 소개하겠습니다. json_encode() 사용 in php 내장 기능 (php > 5.2) php의 데이터는 다른 언어와 매우 잘 전송되어 사용될 수 있습니다. 이 기능의 기능은 숫자 값을 json 데이터 저장 형식으로 변환하는 것입니다.

는 다음과 같습니다.

$arr = array('Name'=>'希亚', 'Age'=>20); 
$jsonencode = json_encode($arr); 
echo $jsonencode;

실행 결과:

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

json_encode 함수의 중국어는 null로 인코딩되어 있습니다. Google에서 검색해 보니 매우 간단하여 프런트 엔드와 밀접하게 통합됩니다. utf-8 인코딩인 것 같아요. 프런트 엔드 Javascript도 utf-8을 사용하는 이유입니다. 해결 방법은 다음과 같습니다.

$array = array (     
'title'=>iconv('gb2312','utf-8','这里是中文标题'),     
'body'=>'abcd...' );  
echo json_encode($array);

작업 결과:

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

배열의 모든 중국어 문자가 누락되었거나 json_encode 뒤에 u2353 등이 나타납니다.

해결 방법은 urlencode() 함수를 사용하여 다음을 처리하는 것입니다. json_encode 이전에 urlencode()를 사용하여 모든 배열의 모든 내용을 처리한 다음 json_encode()를 사용하여 jsonstring으로 변환하고 마지막으로 사용하는 것입니다. urldecode() 인코딩된 중국어를 다시 변환합니다.

샘플 프로그램은 다음과 같습니다:

/************************************************************** 
 * 
 *    使用特定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('possible deep recursion attack'); 
    } 
    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, 'urlencode', true); 
    $json = json_encode($array); 
    return urldecode($json); 
} 
 
$array = array('Name'=>'希亚', 'Age'=>20); 
 
echo JSON($array);

요약:

이 기사는 PHP에서 json_encode 중국어 유니코드 트랜스코딩 문제를 코드 사례를 통해 해결합니다. 친구들이 같은 문제에 직면하면 쉽게 해결할 수 있다고 믿습니다. !

관련 권장사항:

php

php json_encode 중국어 유니코드 트랜스코딩 문제 해결

의 json_encode() 함수에 대한 자세한 설명

php 사용법 소개 json_encode

의 예

위 내용은 PHP의 json_encode가 GB2312 인코딩을 지원하지 않는 문제에 대한 해결 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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