
웹 호스팅 업체에서 제공해주는 MySQL이 EUC-KR인 관계로 별 다른 고민없이 EUC-KR로 개발을 진행하고 있었는데, AJAX를 적용하는 과정에서 한글 깨짐의 문제가 발생했다.
현재 상황은 이렇다.
1. HTML 메타 태크에서의 문자셋 : EUC-KR2. PHP 파일의 문자셋 : ANSI3. DB의 문자셋 : EUC-KR4. PHP Response Header의 문자셋 : EUC-KR
AJAX + Charset 관련 구글링해보니 AJAX에서 사용되는 XMLHttpRequest Object는 UTF-8로만 통신한단다.
Client ó WAS ó DB 문제셋을 맞춰야는데, MySQL의 문자셋을 바꿀 수 없는 상황에서 어떻게 처리해야할지 고민중이다.
방법1. 모든 Charset을 “UTF-8”로 맞추고, UTF-8 환경의 MySQL을 제공해주는 호스팅 업체로 바꾼다.
è 장기적으로 봤을 때 가장 좋은 방법이 될 수 있겠으나, “문제 해결”이 아닌 “돌아가기” 방법이므로 제외.
방법2. 모든 Charset을 “UTF-8”로 맞추고, DB 핸들링 부분에서 각 컬럼값들을 컨버전한다.
è Insert, Update, Select SQL 실행마다 컨버전을 해야하므로 불필요(?)한 자원이 낭비된다.
• Insert, Update SQL 실행 전에 각 컬럼 값 컨버전 ex) $col = iconv("utf-8", "euc-kr", $col);
•Select SQL 실행 후 각 컬럼 값 컨버전 ex) $col = iconv(“euc-kr”, “utf-8”, $col);
방법3. EUC-KR을 기본으로하되, XMLHttpRequest로부터 데이터를 받는 부분의 PHP에서만 각 컬럼값들을 컨버전한다.
è XMLHttpRequest로 한글을 전송하는 경우에만 컨버전하면 되므로 “방법2”에 비해 훨씬 적은 자원으로 해결 가능.
• $_REQUEST['text1'] = iconv("utf-8", "euc-kr", $_REQUEST['text1']);
☞ 본문 출처 : http://www.enjoydev.com/blog/138
☞ 참고 자료 :
댓글을 달아 주세요