The Pursuit of Happyness

전에 이야기 한 데로 여기는 그냥 유용한 코드들에 대한 설명 형식으로 진행이 되므로,
순서가 뒤죽박죽이 될 것입니다.

오늘은 언어 인코딩에 대해서 이야기해 보겠습니다.

PHP를 사용하는 경우 APM 등을 이용하여 Apache, MySQL을 같이 사용하는 경우가 많습니다. 언제 부터인가 다국어 지원에 대한 이슈가 논의되면서 MySQL은 기본 설정이 utf-8 로 되고, 한국어를 쓰기 위해서 서버 설정을 euc-kr 등으로 변경을 해줘야 하는 번거로움이 있었습니다.

다국어를 다루는 것은 상당히 귀찮은 일입니다. ASC 부터 유니코드를 거쳐 utf-16 에 이르기까지 수많은 인코딩 방식이 있는데, 이것은 마치 메모리를 절약하기 위한 자리수 표시 방식이 밀레니엄 버그의 원인이 되었던 것처럼 효율적인 메모리 사용을 통한 지역별 언어 설정이 프로그래밍을 상당히 귀찮게 해주고 있습니다.

언어셋에 대한 부분은 나중에도 다룰 예정이므로, 오늘은 아주 간단한 form 전송시 사용이 가능한 간단한 utf-8 예제를 살펴 보도록 하겠습니다.

먼저 form 전송시에 utf-8 로 인코딩을 하기 위해서는 form 태그에서 아래와 같이 accept-charset을 utf-8 로 설정해 줍니다.

<form method=post action=target.php accept-charset='UTF-8'>


그리고 html 헤더에 다음의 코드를 삽입하게 되면, utf-8로 인코딩 된 페이지가 제대로 나타나게 됩니다.

<meta http-equiv='Content-Type' content='text/html;charset=utf-8'/>


사용에 대한 예제는 아래 페이지를 참고하시면 될 듯 하고요. 아래 페이지에서 이야기하는 서블릿상에서의 utf-8 인코딩이 바로 위의 메타태그를 사용하는 것입니다.

http://www.razorvine.net/test/utf8form/utf8pageform.html


설명을 하다보니 PHP 에 대한 내용이라기 보담은 html 에 대한 내용이 되어버렸네요..

대신 meta 태그를 위와 같이 설정하면 PHP 코드상에서의 한글 등의 문자가 깨져서 나오게 됩니다. 한글 출력시에는 iconv 를 이용해서 출력을 해주면 됩니다. 제가 쓰는 아주 간단한 인코딩 함수 입니다.

function getUTFString($str)
{
  return iconv("CP949", "UTF-8", $str);
}

이 정도의 설정만으로도 웹상에서의 다국어 지원 부분이 어느 정도 쉽게 해결이 될 것이라 생각됩니다. 나중에 AJAX 사용시에 넘겨주는 인자를 인코딩하는 방법과 결과값을 받을 때 사용하는 인코딩에 대해서 정리해 보도록 하겠습니다.

그럼~

Comment +0