[php] json_encode 유니코드 한글 깨짐 해결방법
2023.02.04 18:01
[php] json_encode 유니코드 한글 깨짐 해결방법
1. 개요
PHP 에서 Array 형 데이터를 JSON 포멧으로 출력하고자 하는 경우 json_encode 함수를 호출함으로써 간단하게 데이터 변환이 가능하다.
단, 해당 함수는 UTF-8 형태의 String 값만을 사용할 수 있기 때문에 iconv 를 사용하여 UTF-8 인코딩을 하여 사용해야만 한다.
그런데 여기서 문제가 발생하는데, 한글 데이터를 사용할 경우 json_encode 함수가 한글을 유니코드 형태로 자동으로 변환해서 출력하게끔 되어 있다.
{"a":"\ud55c\uae00","b":"default"}
2. 해결방법
PHP 5.4 이상의 버전에서는 아래와 같이 상수 변수값을 옵션으로 처리하여 간단하게 해결이 된다.
json_encode( $jsonArray, JSON_UNESCAPED_UNICODE );
하지만 PHP 5.4이하의 버전에는 별도로 함수를 만들거나 아래와 같이 urlencode, urldecode 를 사용하는 방법이 있다.
urlencode, urldecode 사용하여 해결방법
$ja['a'] = '한글';
$ja['b'] = 'default';
$jsonEncode = json_encode( $ja );
json_encode 결과값 : {"a":"\ud55c\uae00","b":"default"}
나중에 json_decode를 하면 한글은 정상적으로 나오겠지만 DB에 넣고 검색을 할 경우 한글이 검색이 되지 않아 아래와 같이 하면 한글이 제대로 표현이 된다.
$ja['a'] = urlencode('한글');
$ja['b'] = 'default';
$jsonEncode = urldecode(json_encode( $ja ));
json_encode 결과값 : {"a":"한글","b":"default"}
[출처] https://blog.naver.com/webspeed/222047390309
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.

