문제 상황
PHP에서 strlen() 함수는 문자열의 바이트 수를 기준으로 길이를 계산합니다. 따라서 한글, 특수 악센트 문자 등 멀티바이트(multibyte) 유니코드 문자가 포함된 문자열에는 실제 문자 개수보다 더 큰 값을 반환하게 됩니다.
유니코드 문자열의 정확한 길이를 얻으려면 mb_strlen() 함수를 사용해야 합니다.
예제 코드
다음은 두 함수의 차이를 확인할 수 있는 PHP 코드입니다.
<?php $unicodeValues = 'JohnSmȉth'; echo "mb_strlen으로 측정한 문자열 길이 = ", mb_strlen($unicodeValues, 'utf8'); echo "\n"; echo "strlen으로 측정한 문자열 길이 = ", strlen($unicodeValues); ?>
실행 결과
mb_strlen으로 측정한 문자열 길이 = 9 strlen으로 측정한 문자열 길이 = 10
결과 분석
위 예제에서 문자열 'JohnSmȉth'는 실제로 9개의 문자로 구성되어 있습니다. 하지만 특수 문자 'ȉ'는 UTF-8 인코딩에서 2바이트를 차지하기 때문에, 바이트 수를 세는 strlen()은 10을 반환합니다.
반면 mb_strlen()은 지정된 인코딩(여기서는 'utf8')을 기준으로 실제 문자 개수를 계산하므로 올바른 값인 9를 반환합니다.
결론
멀티바이트 문자(한글, 일본어, 중국어, 악센트 문자 등)를 다룰 때는 반드시 mb_strlen()을 사용하는 것이 좋습니다. 단, 이 함수를 사용하려면 PHP에서 mbstring 확장 모듈이 활성화되어 있어야 합니다.