ThinkPhp5.1 개발 프로젝트를 사용하는 경우, 배열을 JSON 문자열로 변환하는 것이 일반적인 작업이지만 때로는 "데이터를 JSON으로 변환 할 수 없다"는 오류가 나타나며, 이는 json_encode 기능에 의해보고 된 오류로 나타납니다. 이것은 일반적으로 Windows 아래에서 GBK 인코딩 된 문자와 같은 비 UTF-8 인코딩 된 문자를 포함하는 배열로 인해 발생하는 반면 JSON 표준은 문자열이 UTF-8 인코딩되어야합니다.
이러한 유형의 문제를 해결하는 두 가지 주요 방법이 있습니다. PHP 내장 기능을 사용하여 인코딩을 변환하거나 ThinkPhp의 자체 JSON 변환 방법을 사용하십시오.
PHP의 iconv () 함수는 문자 인코딩 변환을 구현할 수 있습니다. UTF-8에 인코딩 된 배열 요소의 경우 iconv ()를 사용하여 UTF-8 에코딩 된 다음 json_encode ()를 호출 할 수 있습니다. 샘플 코드는 다음과 같습니다.
$ array = array ( 'name'=> 'Zhang San', 'age'=> 18, 'address'=> 'xxx Road, XXX District, Beijing');
$ json_str = json_encode ($ array, json_unescaped_unicode); // 오류가 foreach ($ array as $ k => $ v) {에 대해보고 될 수 있습니다.
    $ array [$ k] = iconv ( "gbk", "utf-8", $ v);
}
$ json_str = json_encode ($ array, json_unescaped_unicode);
echo $ json_str;
여기서 json_encode 배열을 직접 사용하려고하면 실패합니다. 그런 다음, 트래 버스, ICONV로 인코딩을 변환 한 다음 JSON 인코딩을 수행함으로써 JSON 문자열을 성공적으로 생성 할 수 있습니다.
ThinkPhp5.1은 캡슐화 된 JSON 보조 클래스를 제공하며,이 클래스는 배열을 JSON 문자열로 직접 변환하고 인코딩 문제를 자동으로 처리 할 수 있습니다. 코드 예제는 다음과 같습니다.
생각 \ 헬퍼 \ json을 사용하십시오. $ array = array ( 'name'=> 'Zhang San', 'age'=> 18, 'address'=> 'xxx Road, XXX District, Beijing'); $ json_str = json :: encode ($ array); echo $ json_str;
이 방법에는 수동 변환 및 인코딩이 필요하지 않으므로 개발 프로세스를 단순화하고 ThinkPHP 프로젝트에 사용하는 것이 좋습니다.
배열을 JSON으로 변환 할 때 인코딩 문제는 일반적인 함정입니다. JSON_ENCODE에서보고 한 대부분의 오류는 문자 인코딩과 관련이 있습니다. ICONV 변환 또는 ThinkPhp의 JSON :: Encode 메소드를 실제 상황에 따라 선택하여 올바른 데이터 인코딩을 보장하고 코드 효율성을 향상시킬 수 있습니다. 이 두 가지 방법을 이해하고 마스터하면 개발 문제 코딩 문제로 인한 JSON 변환 실패를 피할 수 있습니다.