Knowledge Map

json_encode에서 이스케이프 문자열 본문

WEB/PHP

json_encode에서 이스케이프 문자열

2018. 10. 27. 07:46

무료호스팅에서 php5.6을 사용가능하게 해놨길래 별생각없이 옆에 생활코딩 php 정리 글 하나 띄워놓고 시작을 해봤다. 원래의 목표는 간단한 api서버 만들어놓고 댓글 CRUD정도만 하려고 했다. 그런데 문제가 생겼다. 서버 설정이 euc-kr로 변경불가하다는 점이었다. 인코딩 문제가 가장 짜증났었는데 이번에도 그랬다.

먼저 php에서 json변환을 하기 위해서는 utf-8로만 가능하다. euc-kr로는 불가능하다. json_encode 자체가 이미 그렇게 만들어져 있다.그래서 iconv를 이용해서 만들었는데 자꾸 이상하게 문자가 출력이 되었다.

\uac00\uac00\uac00\uac00\uac00 이런식으로..

무엇때문일까 한참을 찾았다. iconv도 써보고, mb_convert_encoding, html_entity_decode도 써보고 mysql의 설정도 변경해보고 php파일의 인코딩도 변경해보고 해봤는데 결국 문제는 그것들이 아니었다. json_encode에서 이스케이프 를 추가해서 그런 것이었다. 그러니 그것을 제외하는 식으로 대응하면 쉽게 해결이 된다.

1. iconv를 이용해서 키와 값들의 인코딩을 변경해준다.
2. json_encode($target, JSON_UNESCAPED_UNICODE); // JSON_UNESCAPED_UNICODE를 붙여주면 된다.

이러면 정상적으로 진행이 된다. 물론 그냥 냅두고 js단에서 unescape를 해버려도 된다. 그게 더 나을려나?


Comments