웹&컴퓨팅

UTF8 을 사용하기 위한 APM 설정

x2chi 2008. 6. 24. 06:08
반응형
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;
반응형