Webi Blog

웹아이에서 운영되고 있는 블로그입니다.

Web/PHP

PHP 문자열 문자셋 확인하기 | mb_detect_encoding()

웹아이 2022. 2. 28. 20:24

 

보통 개발을 진행할 때 주로 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를 이용해서 자동으로 감지되도록 할 수 있습니다.

 

문자셋이 별거 아닌 거 같지만 이 함수를 몰라 헤매었 던 날이 꽤 있었습니다.

꼭 함수를 외우실 필요는 없지만 문자셋 확인 필요할 때는 이러한 함수가 있다는 것만이라도 알고 계신다면, 문자셋으로 인해 고생하는 경우는 줄이실 수 있습니다.

반응형