JavaScript [JSON] 유니코드 에러 (json객체 반환 시 한글이 유니코드로 나올 때)
페이지 정보
본문
PHP 에서 Array 형 데이터를 JSON 포멧으로 출력하고자 하는 경우 json_encode 함수를 호출함으로써 간단하게 데이터 변환이 가능합니다.
단, 해당 함수는 UTF-8 형태의 String 값만을 사용할 수 있기 때문에 iconv 를 사용하여 UTF-8 인코딩을 하여 사용해야만 합니다.
그런데 여기서 문제가 발생하는데, 한글 데이터를 사용할 경우 json_encode 함수가 한글을 유니코드 형태로 자동으로 변환해서 출력하게끔 되어 있습니다.
[{"shop_idx":"1","shop_id":"shop1","shop_name":"\ub9c8\ud3ec\uac08\ub9e4\uae30 \ubcf8\uc8101"}]
PHP 5.4 버전 이상을 사용할 경우, 다음과 같이 상수 변수 값을 옵션으로 간단하게 해결이 가능합니다.
<?php
echo json_encode($arrJson, JSON_UNESCAPED_UNICODE);
?>
결과값
[{"shop_idx":"1","shop_id":"shop1","shop_name":"마포갈매기 본점1"}]
하위 버전 PHP를 사용하는 경우 json_encode 함수가 옵션 값을 받지 않기 때문에 해당 방법을 사용 할 수 없습니다.
아래와 같이 함수를 추가해서 한글 변환을 해줘야 합니다.
<?php
// 유니코드 에러 (json객체 반환 시 한글이 유니코드로 나올 때)
function raw_json_encode($input) {
return preg_replace_callback(
'/\\\\u([0-9a-zA-Z]{4})/',
function ($matches) {
return mb_convert_encoding(pack('H*',$matches[1]),'UTF-8','UTF-16');
},
json_encode($input)
);
}
?>
참고자료
https://woo-dev.tistory.com/11
https://ittravelkr.tistory.com/30
단, 해당 함수는 UTF-8 형태의 String 값만을 사용할 수 있기 때문에 iconv 를 사용하여 UTF-8 인코딩을 하여 사용해야만 합니다.
그런데 여기서 문제가 발생하는데, 한글 데이터를 사용할 경우 json_encode 함수가 한글을 유니코드 형태로 자동으로 변환해서 출력하게끔 되어 있습니다.
[{"shop_idx":"1","shop_id":"shop1","shop_name":"\ub9c8\ud3ec\uac08\ub9e4\uae30 \ubcf8\uc8101"}]
PHP 5.4 버전 이상을 사용할 경우, 다음과 같이 상수 변수 값을 옵션으로 간단하게 해결이 가능합니다.
<?php
echo json_encode($arrJson, JSON_UNESCAPED_UNICODE);
?>
결과값
[{"shop_idx":"1","shop_id":"shop1","shop_name":"마포갈매기 본점1"}]
하위 버전 PHP를 사용하는 경우 json_encode 함수가 옵션 값을 받지 않기 때문에 해당 방법을 사용 할 수 없습니다.
아래와 같이 함수를 추가해서 한글 변환을 해줘야 합니다.
<?php
// 유니코드 에러 (json객체 반환 시 한글이 유니코드로 나올 때)
function raw_json_encode($input) {
return preg_replace_callback(
'/\\\\u([0-9a-zA-Z]{4})/',
function ($matches) {
return mb_convert_encoding(pack('H*',$matches[1]),'UTF-8','UTF-16');
},
json_encode($input)
);
}
?>
참고자료
https://woo-dev.tistory.com/11
https://ittravelkr.tistory.com/30
댓글목록
등록된 댓글이 없습니다.