일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- js
- 알고리즘스터디
- 프로그래머스알고리즘
- 자바스크립트
- 코테스터디
- next.js 에러
- 프로그래머스 Lv.0
- Redux-Toolkit
- 프로그래머스코테
- 프로그래머스코딩테스트
- CSS
- 알고리즘문제
- 개발자
- html
- mysql
- 프로그래머스
- 코딩
- 프로그래머스 레벨0
- 정보처리기사
- 프로그래머스 코테
- 1일1코테
- 프로그래밍
- 코테준비
- next.js
- 프로그래머스 코딩테스트
- 프로그래머스 알고리즘
- 알고리즘공부
- 코딩테스트
- 정처기기출
- 코테공부
- Today
- Total
계발하는 개발자
[PHP] json_encode 유니코드 한글 깨짐 현상 해결 본문
일반적으로 PHP에서 Array 데이터를 JSON 포맷으로 출력하려고 하는 경우,
아래와 같이 json_encode 함수를 호출해서 데이터 변환이 가능하다.
에러
그런데 뭣모르고 호기롭게 json_encode 함수로 데이터 출력할라치면 아래와 같은 페이지를 마주하게 될거다.한글이 들어간 부분만 죄다 깨져서 나온다...
사실 그렇더라도 클라이언트에서 막상 서버로부터 api호출해서 받은 데이터는 정상적인 한글 형태로 잘 출력되어서 별 문제가 아니다 넘어갈 수도 있을듯하다.
클라이언트에서 JSON 데이터를 전달 받았을 때 브라우저에 의해 자동으로 파싱(디코딩)되는 특성 탓에
클라이언트에서는 위와 같이 정상적으로 출력이 되는듯하다.
그렇다 하더라도, 데이터 통신에 있어서 언제나 데이터가 일관되고 안전한 상태로 전달되는 게 가장 중요하기 때문에 서버측 데이터에서 한글이 유니코드화 되어서 출력되는 부분을 간과할 수 없다.(는 생각이다)
원인
이러한 현상이 나타나는 이유를 찾아보니 php에서 json_encode 를 사용해서 JSON 문자열로 변환시키려고 할 때
데이터 안에 한글이 포함되어 있으면 한글을 유니코드 형태로 자동 변환(인코딩)해서 출력시키기 때문에,
별도의 decode 작업을 거쳐서 사용해야 한단다.
✅ json_encode 함수
PHP 내장 함수 중 하나로, PHP 배열이나 객체를 JSON 문자열로 변환하는 데 사용된다.
또한, json_encode 함수는 기본적으로 Unicode 이스케이프 시퀀스를 생성하여 JSON 문자열을 만든다.
-> 왜 그럴까?
1. 데이터 안정성: JSON은 특수 문자와 이스케이프 문자를 일반 텍스트와 구분할 수 있도록 이스케이프 시퀀스를 사용한다. 이렇게 하면 데이터가 파싱될 때 특수 문자가 부정확하게 해석되거나 오용되는 것을 방지할 수 있다.
2. 데이터 일관성: JSON은 모든 문자열을 동일하게 다루므로 언어나 문자셋에 관계없이 데이터를 표현할 수 있다. 이것은 국제화 및 다국어 지원을 위해 중요하다.
3. 전송 효율성: 이스케이프된 유니코드 문자열은 전송 중에 일부 특수 문자로 인해 문제가 발생하지 않도록 도와준다. 예를 들어, JSON 내에 큰 따옴표나 역슬래시가 포함된 경우, 이스케이프된 문자열로 표현함으로써 데이터가 유실되거나 왜곡되는 것을 방지한다.
4. 보안성: 이스케이프된 문자열은 악의적인 공격으로부터 데이터를 보호하는데 도움이 된다. 예를 들어, 인젝션 공격을 방지하기 위해 데이터를 이스케이프하여 안전하게 처리할 수 있다.
해결
유니코드 문자열 인코딩이 안되게 별도의 옵션을 걸어서 해결할 수 있었다.
이렇게 하면 유니코드 문자열로 인코드되는 걸 막아주기 때문에,
이제 한글 데이터가 정상적으로 잘 출력되게 된다.
'❗️Error' 카테고리의 다른 글
dev_genie
@dev_genie
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!