PHP5.3에서 json_encode 후 한글 깨짐

-- PHP 2016. 4. 21. 23:22
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

PHP로 API서버를 구축하는 도중 아래와 같은 문제가 나타났다.


json_encode 시 한글이 깨지는 현상

PHP5.3을 사용하고 있으므로 아래의 해결방법이 다른 버전에서는 다를 수 있다.
클라이언트에서 요청한 결과를 JSON형태로 응답하려고 하기에 아래와 같이 작업을 하였다.

$res['cd'] = 0;
$res['msg'] = 'OK';
$res['data1'] = '확인';

$json = json_encode ( (object) $res );
echo $json;

위의 값을 클라이언트에서 파싱해보면 cd, msg는 정상적이지만 data1의 값은 깨진다.
json_encode를 통해 한글이 깨짐을 알 수 있는데, 필자는 urlencode, urldecode를 통해 이를 해결하였다.

$res['cd'] = 0;
$res['msg'] = 'OK';
$res['data1'] = urlencode ('확인');

$json = json_encode ( (object) $res );
$json = urldecode ($json);
echo $json;

혹시 PHP의 다른 버전들에 대해서도 테스트할 기회가 생긴다면 버전별로 이 포스트에 정리하도록 하겠다.



추가) 2016.04.21

DB에서 가져온 한글데이터 역시 json_encode 후 제대로 표현되지 않았다.
필자는 MSSQL을 이용했지만, 참조한 사이트에서는 MySQL인 경우에도 마찬가지였다.

function han ($s) { return reset(json_decode('{"s":"'.$s.'"}')); }

function to_han ($str) { return preg_replace('/(\\\u[a-f0-9]+)+/e','han("$0")',$str); }

// DB로부터 받은 값을 변수에 저장
while($e = mysql_fetch_assoc($result)){
$output[] = $e;
}
 
$encode = json_encode($output);
print (to_han($encode));

PHP5.3인 경우에 위와 같은 방식으로 해결이 되었다.


'-- PHP' 카테고리의 다른 글

PHP Magic Method (특수메소드)  (0) 2017.05.10
PHP 결과에 생기는  값 제거  (0) 2016.05.23
php @  (0) 2015.03.02
[CI] CodeIgniter의 특징 및 장점  (0) 2013.10.17
[CI] 폴더설명  (0) 2013.10.17
posted by 어린왕자악꿍