개발은 나혼자 하는게 아니므로 서로의 문자셋을 맞추는게 중요한데 최근 웹문서의 문자셋은 대부분 utf-8로 세팅 되어 있는 경우가 많다. php로 작업을 하다 보면 문자가 깨지는 경우가 종종 있는데 몇가지 원인이 있다. 웹서버의 문자셋, php.ini에서 설정된 문자셋 그리고 mysql과 같은 DB에서 설정된 문자 셋인데 이 중 하나라도 통일 되어 있지 않다면 어디에선가 알 수 없는 문제가 생긴다. 글씨가 깨진다는 말이다.
몇 일전 이니시스관련되어 세팅할 일이 있었다. 역시 이쪽 서버는 모두 utf-8로 세팅이 되어 있지만 유독 이니시스의 모바일 결제는 euc-kr로 정보를 주고 받는다. 따라서 이 쪽 세팅을 하기 위해서는 서버와 php 그리고 내용을 보여주는 DB까지 euc-kr로 바꾸어 되는데 이 것 하나 때문에 모든 설정을 바꿀 수는 없는 일이다.
다행히 php에서는 iconv라는 문자셋 변경 함수가 있다. 사용법은 간단하다
$myTempVar = iconv(‘UTF-8′,’EUC-KR’,$myData);
위의 함수를 통해서 $myData의 UTF-8 문자 셋이 모두 EUC-KR로 바뀐다. 그렇지만 웹브라우저에서 보면 글씨가 깨지게 된다. 그냥 이니시스에서 모바일 모듈도 UTF-8로 수정하면 될텐데 아직 시대에 뒤떨어진 EUC-KR을 고집하고 있다.
해결법은 헤더를 EUC-KR로 선언해주면 브라우저에서 글씨가 깨지지 않는다. 첫번째 줄에 이 문서는 EUC-KR문서라는 사실을 명시해주면 브라우저에서 깨지지 않는다. 방법은 아래에 있다.
header("Content-Type: text/html; charset=EUC-KR");
$myTempVar = iconv('UTF-8','EUC-KR',$myData);
echo $myTempVar;
이렇게 설정해야 제대로 된 EUC-KR문서를 깨지지 않고 브라우저에서 볼 수 있게 된다.