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 [확장형 뇌 저장소:티스토리]
첫번째는 원래 형식, 두번째는 변경하고 싶은 형식, 세번째는 형식을 변환해야할 문자열을 담은 변수를 담으면 된다.