우리 모두 알고 있듯이 json_encode는 일반적으로 json의 한자를 유니코드로 이스케이프하지만 이것이 반드시 우리가 원하는 것은 아닙니다. 때로는 한자 형태의 json 문자열을 얻어야 할 때가 있습니다. 예를 들어, gbk로 인코딩된 json 문자열을 얻어야 합니다(한자 형태의 문자열이 트랜스코딩되는 경우). 좋은 방법 없을까요?
php 관계자는 이러한 요구를 듣고 신뢰할 수 있는 솔루션인 JSON_UNESCAPED_UNICODE를 제공했습니다. 이 매개변수를 사용하면 json_encode가 더 이상 중국어 문자를 유니코드로 변환하지 않도록 할 수 있습니다.
이렇게 하면 문제가 해결될 것 같나요? 이 매개변수를 만족스럽게 사용했을 때 우리는 그것이 아무 소용이 없다는 것을 알았습니다. 자세히 살펴보면 이 매개변수는 PHP 5.4 이후 버전에서만 지원된다는 것을 알 수 있습니다. 이전 PHP는 어떻습니까?
커뮤니티에서 해결 방법을 제공합니다.
<span>1</span><span>function</span> my_json_encode(<span>$arr</span><span>){ </span><span>2</span><span>//</span><span>convmap since 0x80 char codes so it takes all multibyte codes (above ASCII 127). So such characters are being "hidden" from normal json_encoding</span><span>3</span><span>array_walk_recursive</span>(<span>$arr</span>, <span>function</span> (&<span>$item</span>, <span>$key</span>) { <span>if</span> (<span>is_string</span>(<span>$item</span>)) <span>$item</span> = mb_encode_numericentity(<span>$item</span>, <span>array</span> (0x80, 0xffff, 0, 0xffff), 'UTF-8'<span>); }); </span><span>4</span><span>return</span> mb_decode_numericentity(json_encode(<span>$arr</span>), <span>array</span> (0x80, 0xffff, 0, 0xffff), 'UTF-8'<span>); </span><span>5</span> }
그러나 이 방법은 5.2에서는 익명 기능을 지원하지 않기 때문에 5.3에서만 지원됩니다. 해결책은? 익명 함수를 정의하면 됩니다.
위 내용은 json_encode가 중국어 문자가 유니코드로 변환되는 것을 방지하는 방법과 관련 측면을 소개하고 있으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.