본문 바로가기

프로그래밍/PHP

웹 페이지 한글이 깨지는 문제

이번에 DB텀을 하면서 우리 동아리(untoC) 서버에서 작업을 하게 됐다.
왜냐하면 기본적인 서버 환경이 다 갖추어져 있기 때문이었다. Php, mysql, apache, …등이 다 설치가 되어 있기 때문에 그냥 쓰기만 하면 되는 상황이었다.
그래서 자연스럽게 php파일을 만들었는데 이게 무슨 일???!!!

한글이 깨지는 것이었다!!!!

 

처음에는 서버의 환경 설정 문제일 거라 생각했다. 구글링을 하면서 엄청나게 찾아 헤맸지만 절대 답을 찾을 수 없었다.

구글링을 통해 알아낸 몇가지 사실은 다음과 같다.

이렇게 한글이 깨지는 문제는 character set의 설정 문제인데 이는 php, mysql, apache에서 각각 설정을 다 해줘야 하는 부분이었다.

 

  • 먼저 php설정은 etc폴더에 있는 php.ini 파일.
    php.ini파일에서 수정해야 하거나 추가해야 하는 부분은 아래와 같다.

default_charset = "UTF-8"

mbstring.language = UTF-8

mbstring.internal_encoding = UTF-8

mbstring.http_input = auto

mbstring.http_output = UTF-8

mbstring.encoding_translation = On

mbstring.detect_order = auto

mbstring.substitute_character = none;

 

  • Mysql설정은 etc폴더에 있는 my.cnf 파일
    my.cnf파일에서 수정해야 하거나 추가해야 하는 부분은 아래와 같다.

[mysqlId]부분

default-character-set = utf8

 

[client] 부분

character-set = utf8

 

  • Apache설정은 etc/httpd/conf폴더에 있는 httpd.conf 파일
    httpd.conf파일에서 수정해야 하거나 추가해야 하는 부분은 아래와 같다.
    AddDefaultCharset의 경우에는 어떤 웹에서는 UTF-8로 설정해야 한다고 하고, 또 다른 사이트에서는 추가하면 화면이 깨질 수 있다고 하니 주의하자.

AddDefaultCharset UTF-8

 

  • etc/sysconfig 폴더에 있는 i18n 파일
    i18n파일에서 수정해야 하거나 추가해야 하는 부분은 아래와 같다.

LANG="ko_KR.UTF-8"
SUPPORTED="ko_KR.UTF-8:ko_KR:ko"

export LANG="ko_KR.UTF-8"

 

  • html 또는 php파일(웹 페이지 파일)
    우리가 웹에 보여주고 싶은 페이지에는 <head>태그 사이에 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>이라고 적어줘야 한다.

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

</head>

 

그런데 위의 과정들을 아무리 보고 수정해보아도 도저히 바뀌는 건 없었다. 여전히 한글 대신에 이상한 말들만 떠 있었다.
그래서 고심 끝에 내린 결론!!

 

내가 생성한 파일 자체가 UTF-8이 아닌 다른 것으로 인코딩 되어있다!!!

 

그래서 리눅스에서 인코딩 설정을 어떻게 하는지가 중요하게 되었는데, 답은 의외로 간단했다.



  1. 일단은 위 그림과 같이 putty 설정을 보면 <창 – 변환>에서 수신한 데이터를 이 문자셋으로 가정 부분에 UTF-8로 해준다.

    이렇게 하고 나면 putty에서 UTF-8로 디코딩하는 것 같아보였다. 그래서 기존에 작성했던 파일의 한글 부분을 보면 아래 그림과 같이 이상한 문자로 장식된다.
    바로 아래 그림의 흰 사각형 안쪽 부분에 있는 글들이 원래는 한글로 된 글자였는데, 지금은 저렇게 알아볼 수 없게 표시되는 것이다.


    이 파일을 실제로 웹 브라우저를 통해서 보면 아래와 같은 참혹한 결과를 볼 수 있을 것이다.



    그래서 우리가 해야할 일은,,

     

     

  2. 기존의 한글 부분을 다시 채워넣는 것이다.

    이렇게 깨진 부분을 다시 제대로 된 한글도 채워 넣으면 이제는 UTF-8형식을 따르게 되는 것이다.


    이렇게 바꾸고 나서 저장을 하고 다시 웹 브라우저를 통해서 보면 다음 그림과 같이 아주 멋지게 한글이 잘 나옴을 알 수 있다.


    Mission Success!!