서론
php로 개발을 하다 보면 암호화 복호화를 할 때도 많고, 여러 가지 언어를 사용하다 보니 한글이 깨질 때도 많습니다.
특히 한국에서는 한글을 작성해야 되는 경우가 많으므로 영어나 숫자에 비해서 글자가 제대로 표기되지 않는 경우 종종 발생합니다.
이럴 때 사용하는 방법이 여러 가지가 있는데 그중 2가지 방법을 소개해볼까 합니다.
※인코딩 이란?
: 인코딩이란 사람이 인지 가능한 언어를 컴퓨터가 인지 가능하도록 0이나 1로 구성된 코드로 변경하는 작업을 통틀어서 말합니다.
코드화, 암호화 등등 여러분야로 사용가능하며 대표적으로 사진, 비디오, 오디오 인코딩이 있습니다.
1. 페이지 전체의 문자 셋 변경
php의 헤더 안에 아래와 같이 charset을 변경해줄 수 있습니다.
utf-8로 캐릭터셋을 변경해 두면 한글의 표기가 자유롭고 특수문자들도 쉽게 사용이 가능합니다.
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
혹은 아래와 같이 charset을 UTF-8로 변경해 주는 것입니다.
위와 동일하게 utf-8로 변경을 하는 것인데, 한 줄로 더 간단하게 변경이 가능합니다.
<?php header("Content-Type:text/html;charset=utf-8"); ?>
하지만 위와같이 설정할 때 단점도 존재합니다.
이 부분의 단점은 이미 다 코딩해 둔 코드들의 문자 셋도 변경이 되어, 기존에 잘 나오던 문자들도 깨져서 나올 수 있다는 점입니다.
기존에 깨져서 나오던 문자열은 잘 나오지만, 기존에 잘 나오던 문자들이 깨져서 나오는 반대의 현상이 발생합니다.
위와 같은 경우는 두개의 문자열의 인코딩이 다르기 때문에 한쪽은 잘 나오고,
한쪽은 잘 나오지 않고 하는 현상이 발생하게 되는 것입니다.
이럴 땐 다음 방법을 사용해 보길 권장합니다.
2. 특정 문자열의 문자 셋만 변경
이번에는 다른 페이지에서 가져온 문자열의 인코딩만 변경해 주는 것입니다.
특정 텍스트의 인코딩만 변경해 주어 사용하는 방법입니다.
$get_text = "내가 가져온 한글 텍스트";
$test_text = iconv("UTF-8", "EUC-KR", $get_text);
위와 같이 한글의 텍스트를 가져오고 iconv 함수를 사용하여 인코딩을 변경하는 것이 가능합니다.
지금의 예제는 기존 utf-8의 인코딩이던 글자를 EUC-KR로 변경해 준 것입니다.
iconv의 사용방법은 아래와 같습니다.
iconv("현재인코딩", "변경할인코딩", "인코딩 변경할 문자열");
그리고 iconv와 사용 방식이 비슷한 함수로는 mb_convert_encoding() 함수가 있습니다.
$get_text = "내가 가져온 한글 텍스트";
$test_text = mb_convert_encoding($get_text , "EUC-KR", "UTF-8");
iconv와 마찬가지로 인코딩 변환이 가능하지만 함수 안에 들어가는 변수의 순서가 다릅니다.
사용방법은 아래와 같습니다.
mb_convert_encoding("인코딩 변경할 문자열", "변경할인코딩", "현재인코딩");
mb_convert_encoding() 은 위와 같은 형식으로 작성하여 사용할 수 있으며, mb_convert_encoding()를 사용하면 간단하게 인코딩이 가능합니다.
결론
오늘 포스팅을 통해 특정 문자열만 인코딩을 변경하는 방법을 알아보았습니다.
전 세계에는 여러 가지 언어가 존재하고, 각 언어에 맞는 인코딩 방법은 다양합니다.
세계화에 맞추어 여러 언어에 대응하는 페이지를 작성하고 싶다면, 인코딩에 대해서 잘 알아두고 공부해 두면 좋겠습니다.
현재 작성한 글은 갑작스러운 문자 인코딩 문제로 고민하고 있을 분들을 위해 오늘의 글이 도움이 되셨으면 좋겠습니다.
다음 포스팅으로는 현재 문자열의 인코딩이 무엇인지 체크하는 것도 가능하므로 이 내용은 다음 글에서 다뤄보도록 하겠습니다.
'코딩' 카테고리의 다른 글
[PHP] foreach문 반복문 사용하기 (15) | 2022.12.22 |
---|---|
[jQuery] 값을 입력하지 않았을 때 경고창 띄우기 (alert) (2) | 2022.12.20 |
[PHP/HTML] form태그를 사용하여 다른 페이지로 값 넘겨주기 (hidden) (2) | 2022.12.19 |
[CSS] 글자와 글자 사이 간격 속성 letter-spacing (1) | 2022.12.17 |
[PHP] 문자 인코딩 감지, charset 확인 방법 (0) | 2022.12.16 |
댓글