반응형
http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=42439&sca=&sfl=wr_subject%7C%7Cwr_content&sop=and PHPSCHOOL 의 알짜초보님 글입니다. MySql에서의 한글사용에 대한 질문이 많고 종래의 EUC-KR로 만들어진 홈페이지를 첨단 만국어를 표기할 수 있는 UTF-8 사용에 대해 요약하였습니다. ================================================================================== 종래에는 홈페이지가 자국인들만 이용할 것을 예상하고 제작하므로써 외국인 즉, 비한글 사용자들에 대한 서비스를 미쳐 염두에 두지 못하므로써 한글이 ?????$%^&( 처럼 깨져 보이는 무지함을 보였던 것이 사실입니다. 이제는 홈페이지 제작도 유니코드(UTF-8) 인코딩 방식이 세계적 추세이며 이러한 추세에 맞추어 MySql도 기본언어를 utf8(UTF-8 인코딩) 방식으로 변경하였으므로, 홈페이지를 종래 euc-kr 등 한글로만 표기하던 방식도 UTF-8 인코딩 방식으로 업데이트해야 할 때 입니다. UTF-8 인코딩 방식은 한국어, 일어, 중국어, 태국어, 아랍어 등 만국어 표기가 가능한 방식입니다. APM에서 UTF-8을 구현하려면 꽤 많은 부분을 수정해야 합니다 . 다음은 APM에서 UTF-8 구현 방법과 소스코드를 첨부합니다. 적용 환경 ---------------- OS : WinXP SP2 Apache : httpd-2.0.52-3 PHP : php-5.0.3 MySQL : mysql-4.1.11 ---------------- * 아래 내용 말고도 OS와 브라우저가 지원해 주어야 하지만, OS는 Win98 부터 지원하고 있으며 많이 쓰는 익스플로러도 역시 지원하고 있으니 손쉽게 설정을 변환할 수 있습니다. 1. apache 환경파일 편집 (httpd.conf) 2. php 환경파일 편집 (php.ini) 3. mysql 환경파일 편집 (my.cnf) 4. apache, mysql 서비스 재시작 5. mysql에서 캐릭터셋 확인 및 디비생성 6. php 소스코드에 @mysql_query("set names utf8"); 함수 추가 7. php 소스에 한글문자열이 있으면 파일저장할때 UTF-8 파일형식으로 저장 8. 웹브라우저의 보기-인코딩-UTF-8로 선택 9. 아웃룩 익스프레스 : 도구->옵션->읽기->글꼴->인코딩:유니코드(UTF-8)-> 기본설정 클릭. 국가별 설정->"모든 받는 메시지에 기본 인코딩 사용"에는 체크를 해제. (여기에 체크하면 EUC-KR 이나 다른 언어로 작성된 메일은 깨지게 됨) * 추가 : 6번 php소스 페이지에 @mysql_query("set names utf8"); 함수를 추가하는 문제는 먼저 header.php파일에 추가하면 대부분 작동하며, 예외적으로 작동이 안되는 파일이 간혹 있으므로 천천히 점검해서 필요한 페이지에 추가해 주면 됩니다. * htmlentities() 버그 : $xsitename = htmlentities($xsitename, ENT_QUOTES); 와 같은 사용례에서는 utf8로 입력되지 않는 경우가 있는데, php 버그라고 하며 펫치가 나와 있답니다. 추가 : htmlentities() 때문에 한글이 깨지면 htmlspecialchars로 대치해도 됩니다. 1. apache/conf/httpd.conf 에서 캐릭터셋 수정 /*------------ AddDefaultCharset UTF-8 2. etc/php.ini 에서 캐릭터셋 수정 /*------------ ;default_charset = "iso-8859-1" default_charset = "utf-8" * 위와 같이 지정해야 한다고 주장하는 사람도 있으나 필자의 경우 default_charset = "utf-8" 로 지정하지 않고 초기 설정상태로 두어도 무방하였음. 3. etc/my.cnf (또는 my.ini) 에서 캐릭터셋 수정 /*------------ [client] #password = your_password default-character-set=utf8 [mysqld] init_connect=SET collation_connection = utf8_general_ci init_connect=SET NAMES utf8 default-character-set=utf8 character-set-server=utf8 collation-server=utf8_general_ci [mysql] default-character-set=utf8 4. 환경변수를 모두 수정후 apache 및 mysql 서비스 재시작 /*------------ 5. mysql에서 캐릭터셋 확인 /*------------ # mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 247 to server version: 4.1.10a Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> use test Database changed mysql> show variables like 'c%'; +---------+-----------+ | Variable_name | Value | +---------+-----------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | | collation_connection | utf8_general_ci | | collation_database | utf8_general_ci | | collation_server | utf8_general_ci | | concurrent_insert | ON | | connect_timeout | 5 | +---------+-----------+ 12 rows in set (0.00 sec) * MySql에서 데이터베이스 생성 mysql>CREATE DATABASE 디비명 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; |
반응형
'웹&컴퓨팅' 카테고리의 다른 글
쉽지만 지키기 어려운 정보보호 첫걸음 (0) | 2008.06.24 |
---|---|
OpenID 빠른 로그인 (0) | 2008.06.24 |
PHP의 유동변수!? - $a1 ~ $a2 같은 형식의 변수를 반복문 돌릴때... (2) | 2008.05.24 |
Outlook Express 메시지 필터 - 백업 및 복구 방법 (0) | 2008.05.24 |
[ LINUX ] tar 압축 (0) | 2008.05.24 |