>백엔드 개발 >PHP 튜토리얼 >PHP 문자열 길이 계산 - strlen() 함수 사용 소개

PHP 문자열 길이 계산 - strlen() 함수 사용 소개

高洛峰
高洛峰원래의
2017-01-05 11:45:341918검색

strlen() 함수와 mb_strlen() 함수

PHP에서 strlen() 함수는 문자열의 길이를 반환합니다. 함수 프로토타입은 다음과 같습니다.

int strlen(string string_input);

string_input 매개변수는 처리할 문자열입니다.

strlen() 함수는 문자열이 차지하는 바이트 길이를 반환합니다. 영문자, 숫자, 각종 기호는 모두 1바이트를 차지하며, 그 길이는 1입니다. 정오 문자는 2바이트를 차지하므로 정오 문자의 길이는 2입니다. 예를 들어

<?php 
echo strlen("www.php.cn"); 
echo strlen("PHP中文网"); 
?>

"echo strlen("www.php.cn");"의 실행 결과: 15

"echo strlen("PHP Chinese Network)의 실행 결과 ");" :15

여기서 질문이 있습니다. 한자는 2바이트를 차지하지 않나요? "삼지 개발 네트워크"에는 분명히 한자가 5개가 있는데 결과가 어떻게 15가 될 수 있습니까?

이유는 다음과 같습니다. strlen()을 계산할 때 UTF-8 한자의 경우 길이가 3인 것으로 처리됩니다. 중국어와 영어가 혼합되어 있는 경우 문자열의 길이를 정확하게 계산하는 방법은 무엇입니까? 여기서는 또 다른 함수 mb_strlen()을 도입해야 합니다. mb_strlen() 함수의 사용법은 문자 세트 인코딩을 지정하는 추가 매개변수가 있다는 점을 제외하면 strlen()과 거의 동일합니다. 함수 프로토타입은 다음과 같습니다.

int mb_strlen(string string_input, string encode);

PHP의 내장 문자열 길이 함수 strlen은 중국어 문자열을 올바르게 처리할 수 없습니다. 이 함수는 문자열이 차지하는 바이트 수만 가져옵니다. GB2312 중국어 인코딩의 경우 strlen으로 얻은 값은 중국어 문자 수의 2배인 반면, UTF-8 인코딩 중국어의 경우 차이는 3배입니다(UTF-8 인코딩에서는 한자 하나가 3바이트를 차지합니다). 따라서 다음 코드는 중국어 문자열의 길이를 정확하게 계산할 수 있습니다.

<?php 
$str = "三知sunchis开发网"; 
echo strlen($str)."<br>"; //结果:22 
echo mb_strlen($str,"UTF8")."<br>"; //结果:12 
$strlen = (strlen($str)+mb_strlen($str,"UTF8"))/2; 
echo $strlen; //结果:17 
?>

원리 분석:

strlen()을 계산할 때 UTF-8로 처리되는 한자의 길이는 3입니다. , 따라서 "Sanzhi Sunchis Development Network"의 길이는 5×3+7×1=22
mb_strlen 계산 시 내부 코드를 UTF8로 선택하면 한자의 길이가 1로 계산되며, so " "Sanzhi sunchis Development Network" 길이는 5×1+7×1=12

나머지는 순수한 수학적 문제이므로 여기서는 자세히 설명하지 않겠습니다...

참고: mb_strlen($str,'UTF-8')의 경우 두 번째 매개변수가 생략되면 PHP 내부 인코딩이 사용됩니다. 내부 인코딩은 mb_internal_encoding() 함수를 통해 얻을 수 있습니다. mb_strlen은 PHP의 핵심 기능이 아니라는 점에 유의해야 합니다. 이를 사용하기 전에 php_mbstring.dll이 php.ini에 로드되어 있는지 확인해야 합니다. 즉, "extension=php_mbstring.dll" 줄이 존재하는지 확인해야 합니다. 주석 처리되지 않습니다. 그렇지 않으면 정의되지 않은 함수 문제가 됩니다.

더 많은 PHP 문자열 길이 계산 - strlen() 함수 사용 소개 및 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.