보통 개발을 진행할 때 주로 UTF-8로 문자셋을 사용합니다.
일반적으로 개발할 경우는 문제가 없지만, 외부 서비스를 연동할 때 문자셋이 다른 경우가 있습니다.
그리고 개발된 지 오래되어 EUC-KR로 되어있는 홈페이지를 수정할 때 문자셋이 달라 문자가 깨지는 경우를 많이 접하게 됩니다.
보통은 iconv() 함수를 이용해서 변환을 해주지만 이 함수는 원래의 문자셋을 알아야 하기 때문에 현재 변수에 문자가 어떠한 문자셋으로 들어가 있는지 알아야 합니다.
하지만 문자셋 확인이 안 되어 iconv() 함수를 사용하더라도 문자가 깨지는 경우가 있습니다.
이럴 경우 현재 변수에 담긴 값의 문자셋이 무엇인지 알아내기 위해 mb_detct_encoding() 함수를 사용합니다.
$str = "테스트 문자";
$encode = array('ASCII','UTF-8','EUC-KR');
$str_enc = mb_detect_encoding($str, $encode);
if(strtoupper($str_enc) == 'UTF-8') {
echo 'UTF-8 입니다';
}
// 아래와 같은 방법으로도 사용이 가능합니다.
mb_detect_encoding($str, 'EUC-KR, UTF-8');
mb_detect_encoding($str, 'auto'); // 자동 감지
mb_detect_encoding($str, array('EUC-KR', 'UTF-8'));
사용 방법은 간단합니다.
위와 같이 $encode 변수에 검사하려는 문자셋을 배열로 만들어주신 후에 체크를 해도 되고요.
하단 3줄처럼 한 줄로 사용하거나, auto를 이용해서 자동으로 감지되도록 할 수 있습니다.
문자셋이 별거 아닌 거 같지만 이 함수를 몰라 헤매었 던 날이 꽤 있었습니다.
꼭 함수를 외우실 필요는 없지만 문자셋 확인 필요할 때는 이러한 함수가 있다는 것만이라도 알고 계신다면, 문자셋으로 인해 고생하는 경우는 줄이실 수 있습니다.
반응형
'Web > PHP' 카테고리의 다른 글
PHP에서 배열을 문자열로 합치기, 문자열을 배열로 만들기 | explode, implode (2) | 2021.09.07 |
---|---|
[PHP] 원격지 파일 주소 노출 안하고 curl로 다운로드 받기 (4) | 2021.09.03 |
영카트에서 네이버 쇼핑 디비URL, 요약URL 확인하기 | 영카트 5.2.3 이상 (4) | 2021.08.31 |
PHP 배열을 손쉽게 JSON 형식으로 변환하기 | json_encode, json_decode (2) | 2021.08.26 |
그누보드만 설치해도 홈페이지가 생긴다?? | WAMP 로컬서버에 그누보드 설치하기 (620) | 2018.07.12 |