Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP strlen() 함수가 유니코드 문자의 잘못된 길이를 반환하는 이유와 해결 방법

문제 상황

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 확장 모듈이 활성화되어 있어야 합니다.