본문 바로가기
Program/PHP

[PHP]json_encode 유니코드 오류 php 5.3버전

by 너부리공작소 2017. 9. 21.
반응형

[PHP]json_encode 유니코드 오류 php 5.3버전 


php에서 json_encode 실행시 한글부분이 유니코드화 되버리는 경우가 발생한다. 여러가지로 삽질을 했는데 

일본 웹에서 해당 내용을 찾을 수 있었다. 

  1. <?php
  2.  
  3. function raw_json_encode($input) {
  4.     
  5.     return preg_replace_callback(
  6.         '/\\\\u([0-9a-zA-Z]{4})/',
  7.         function ($matches) {
  8.             return mb_convert_encoding(pack('H*',$matches[1]),'UTF-8','UTF-16');
  9.         },
  10.         json_encode($input)
  11.     );
  12.     
  13. }
  14.  
  15. $arr = array('변수'=>'내용');


원래코드대로 하면 

$arr = array("한글써보자");

$newarr = json_encode($arr);

이렇게 작성만 하면 json_encode 시 정상적으로 넘어가야 하지만

유니코드화 되버려서 한글이 깨지는 상황이 발생하기도 한다. (utf-8 환경에서도 발생하는 경우 있음)

php 5.4버전의 경우 json_encode($arr,JSON_UNESCAPED_UNICODE) 이렇게 처리해주면 되지만

그 이하 버전에서는 작동을 하지 않는다.

그러므로 위에 함수를 선언해주고, json_encode 해주면 유니코드화가 적용되지 않고 정상적으로 encode가 된다.


$arr = array("한글써보자");

$newarr = json_encode($arr); 이 구문을 아래로 바꿔서 작성하면 된다.

=> $newarr = raw_json_encode($arr); 


출처 : http://www.phppro.jp/qa/4026



반응형

댓글