UTF-8 문자열을 16진수 엔터티로 변환하는 PHP json_encode 함수: 문제를 해결하는 이유와 방법
PHP json_encode 함수는 PHP 변수를 인코딩할 수 있습니다. JSON(JavaScript Object Notation)으로 변환합니다. 그러나 UTF-8 인코딩에서 유니코드 문자를 처리할 때 함수는 기본적으로 해당 문자를 16진수 엔터티로 변환할 수 있습니다. 이는 JSON이 비ASCII 문자를 나타내는 멀티바이트 문자인 UTF-8 문자를 기본적으로 지원하지 않기 때문입니다.
PHP가 UTF-8 문자열을 16진수 엔터티로 변환하는 이유는 무엇입니까?
PHP의 json_encode 함수는 JSON 사양을 사용합니다. 이는 ASCII 문자로 표현할 수 없는 유니코드 문자는 16진수 이스케이프 시퀀스를 사용하여 인코딩되어야 함을 나타냅니다. 이렇게 하면 UTF-8을 지원하지 않을 수 있는 이전 애플리케이션 및 장치와의 호환성이 보장됩니다.
변환 문제 해결
이 문제를 해결하고 UTF-8 변환을 방지하려면 문자열을 16진수 엔터티로 변환하기 위해 PHP는 버전 5.4.0에서 JSON_UNESCAPED_UNICODE 옵션을 도입했습니다. 이 옵션은 ASCII가 아닌 문자에 대해 16진수 이스케이프 시퀀스 대신 유니코드 코드 포인트를 사용하도록 json_encode에 지시합니다.
예
다음 PHP 스크립트가 있다고 가정합니다.
<code class="php"><?php $text = "База данни грешка."; echo json_encode($text); ?></code>
이 코드는 키릴 문자가 16진수 엔터티로 인코딩되는 다음 JSON 문자열을 출력합니다.
<code class="json">"\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u0438 \u0433\u0440\u0435\u0448\u043a\u0430."</code>
UTF-8 문자를 직접 출력하려면 JSON_UNESCAPED_UNICODE 옵션을 사용할 수 있습니다.
<code class="php"><?php $text = "База данни грешка."; echo json_encode($text, JSON_UNESCAPED_UNICODE); ?></code>
이렇게 하면 키릴 문자가 유니코드 코드 포인트를 사용하여 표현되는 다음 JSON 문자열이 생성됩니다.
<code class="json">"База данни грешка."</code>
위 내용은 PHP의 json_encode 함수가 UTF-8 문자열을 16진수 엔터티로 변환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!