TIL

PHP DB AJAX통신 한글 깨짐 인코딩 오류(iconv)

우주속공간 2024. 5. 29. 14:21

[ 문제발생 ]

 

원하는 검색어로 조회를 했을때 빈값으로 가져오게 되는 오류가 발생했다. 

하지만 개발자모드로 들어가서 보니 검색 데이터 값은 잘 전달되는 것을 확인하여 db에 데이터를 조회하는 쿼리과정에서 문제가 발생하지 않을까 예상해보았다.

 

 

[ 디버깅과정 ]

 

1.일단 백엔드에서 DB로 날리는 sql문을 작성한 코드를 찾아 sql문을 출력해보았다.

2. 그랬더니 검색 데이터 값이 한글이 깨져서 이상한 문자로 출력이 되었다.

 

그렇다면 왜 한글이 깨졌을까? 에 대한 답을 찾아보았다. 

 

일단 먼저 내가 서버로 데이터를 보내는 요청값, DB에 저장되어 있는 데이터, 서버가 나에게 보내는 응답값의 chatset 즉 형식을 찾아보았다.

그랬더나 클라이언트에서 요청을 보낼때는 UTF-8로 DB와 응답값은 EUC-KR 형식으로 저장. 보내주고 있었다. 

그래서 서로 형식이 다르고 따로 형식을 맞춰주는 코드가 없었기때문에 전달되는 과정에서 깨지게 된 것이다. 

 

 

[ 해결과정 ]

 

그렇다면 UTF-8값을 DB에서 잘 인식할 수 있게 EUC-KR값으로 변경하는 코드를 작성해주면 된다. 

 

형변환하는 함수로 잘 사용되는 것은 iconv함수이다. 

 

iconv(문자열 charset, 변경할 charset, 문자열)

출처: https://extbrain.tistory.com/38 [확장형 뇌 저장소:티스토리]

 

첫번째는 원래 형식, 두번째는 변경하고 싶은 형식, 세번째는 형식을 변환해야할 문자열을 담은 변수를 담으면 된다.