PHP에서 strlen, mb_strlen은 문자열의 길이를 구하는 함수인데, 초보자의 경우 매뉴얼을 읽지 않으면 차이점을 잘 모를 수도 있습니다.
다음은 예를 사용하여 둘 사이의 차이점을 설명합니다.
먼저 예를 보세요:
Php 코드
<?php //测试时文件的编码方式要是UTF8 $str='中文a字1符'; echo strlen($str).'<br>';//14 echo mb_strlen($str,'utf8').'<br>';//6 echo mb_strlen($str,'gbk').'<br>';//8 echo mb_strlen($str,'gb2312').'<br>';//10 ?>
결과 분석: strlen을 계산할 때 UTF8 한자는 3개의 길이로 처리되므로 "중국어 a " "문자 1 문자"의 길이는 3*4+2=14 입니다. mb_strlen 계산시 내부 코드를 UTF8로 선택하면 한자는 1의 길이로 계산되므로 "한자"의 길이는 1자"는 6이다.
이 두 함수를 이용하면 한자와 영문이 혼합된 문자열의 점유율을 공동으로 계산할 수 있다(한자의 점유율은 2, 영문자의 점유율은 1).
Php 코드
echo (strlen($str) + mb_strlen($str,'UTF8')) / 2;
예를 들어 "한자 1자"의 strlen($str) 값이 14이고 mb_strlen($str) 값이 6이면 "한자 1자"의 값을 계산할 수 있습니다. 자리 표시자는 10입니다.
PHP 코드
echo mb_internal_encoding();
PHP에 내장된 문자열 길이 함수 strlen은 중국어 문자열을 올바르게 처리할 수 없습니다. 이 함수는 문자열이 차지하는 바이트 수만 가져옵니다. GB2312 중국어 인코딩의 경우 strlen으로 얻은 값은 중국어 문자 수의 2배인 반면, UTF-8 인코딩 중국어의 경우 차이는 3배입니다(UTF-8 인코딩에서는 한자 하나가 3바이트를 차지합니다).
mb_strlen 함수를 사용하면 이 문제를 더 잘 해결할 수 있습니다. mb_strlen의 사용법은 문자 인코딩을 지정하는 두 번째 선택적 매개변수가 있다는 점을 제외하면 strlen과 유사합니다. 예를 들어, UTF-8 문자열 $str의 길이를 얻으려면 mb_strlen($str,'UTF-8')을 사용할 수 있습니다. 두 번째 매개변수가 생략되면 PHP의 내부 인코딩이 사용됩니다. 내부 인코딩은 mb_internal_encoding() 함수를 통해 얻을 수 있습니다.
mb_strlen은 PHP의 핵심 기능이 아니라는 점에 유의해야 합니다. Windows에서 사용하기 전에 php_mbstring.dll이 php.ini에 로드되어 있는지 확인해야 합니다. "extension=php_mbstring.dll"이 존재하지만 사용되지 않았습니다. 주석 처리하지 않으면 정의되지 않은 함수 문제가 발생합니다.
이 확장은 Linux에서 컴파일해야 합니다.