PHP는 문자열 길이를 결정합니다. strlen() 및 mb_strlen() 함수

巴扎黑
풀어 주다: 2016-11-09 14:38:49
원래의
1566명이 탐색했습니다.

strlen()

PHP strlen() 함수

정의 및 사용법

strlen() 함수는 문자열의 길이를 반환합니다.

구문

strlen(string)

매개변수: 문자열
설명: 필수입니다. 확인할 문자열을 지정합니다.

코드는 다음과 같습니다

<?php 
$str=‘中文a字1符‘; 
echo strlen($str); 
echo ‘<br />‘; 
echo mb_strlen($str,‘UTF8‘); 
//输出结果 
//14 
//6 
?>
로그인 후 복사

결과 분석: strlen 계산시 UTF8 한자는 3개의 길이로 처리되므로 "한자 1자"의 길이는 3이 됩니다. *4+ 2=14
mb_strlen 계산시 내부 코드를 UTF8로 선택하면 한자의 길이가 1로 계산되므로 "한자 1자"의 길이는 6이 됩니다


mb_strlen() 함수

mb_strlen은 PHP의 핵심 함수가 아니라는 점에 유의해야 합니다. 사용하기 전에 php.ini에 php_mbstring.dll이 로드되어 있는지 확인해야 합니다. 즉,

"extension=php_mbstring .dll" 줄이 존재하고 주석 처리되지 않았는지 확인하세요. 그렇지 않으면 정의되지 않은 함수 문제가 발생합니다.

코드는 다음과 같습니다.

<?php 
$str=‘中文a字1符‘; 
//计算如下 
echo (strlen($str) + mb_strlen($str,‘UTF8‘)) / 2; 
echo 
//输出结果 
//10 
?>
로그인 후 복사

"한자1문자"의 strlen($str) 값은 14, mb_strlen($str) 값은 6, 그러면 "한자 한자"를 계산할 수 있습니다. "문자 1 문자"에 대한 자리 표시자는 10입니다.

둘의 차이점을 설명하세요

코드는 다음과 같습니다


<?php
//测试时文件的编码方式要是UTF8
$str=&#39;中文a字1符&#39;;
echo strlen($str).&#39;<br>&#39;;//14
echo mb_strlen($str,&#39;utf8&#39;).&#39;<br>&#39;;//6
echo mb_strlen($str,&#39;gbk&#39;).&#39;<br>&#39;;//8
echo mb_strlen($str,&#39;gb2312&#39;).&#39;<br>&#39;;//10
?>
로그인 후 복사


결과 분석: strlen 계산시 UTF8 한자는 3길이로 처리되므로 "한자 1문자"의 길이는 3이다 *4+2=14, in mb_strlen

계산시 내부 코드를 UTF8로 선택하면 한자는 길이 1로 계산되므로 "한자 1자"의 길이는 6.


위의 함수는 일부 중국어와 영어가 혼합된 문제를 간단하게 해결할 수 있지만 실제로 사용할 수는 없습니다. 다른 더 좋은 방법을 소개하겠습니다.

중국어와 영어가 혼합된 문자열의 길이를 구하는 PHP의 구현 코드는 다음과 같습니다. 중국어 1개 = 1자리, 영어 2개 = 1자리, 직접 수정 가능합니다

코드

/*** PHP获取字符串中英文混合长度 * @param $str string 字符串* @param $$charset string 编码* @return 返回长度,1中文=1位,2英文=1位*/function strLength($str,$charset=&#39;utf-8&#39;){if($charset==&#39;utf-8&#39;) $str = iconv(&#39;utf-8&#39;,&#39;gb2312&#39;,$str);$num = strlen($str);$cnNum = 0;for($i=0;$i<$num;$i++){if(ord(substr($str,$i+1,1))>127){$cnNum++;$i++;}}$enNum = $num-($cnNum*2);$number = ($enNum/2)+$cnNum;return ceil($number);}
//测试输出长度都为15$str1 = &#39;测试测试测试测试测试测试测试测&#39;;$str2 = &#39;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&#39;;$str3 = &#39;aa测试aa测试aa测试aa测试aaaaaa&#39;;echo strLength($str1,&#39;gb2312&#39;);echo strLength($str2,&#39;gb2312&#39;);echo strLength($str3,&#39;gb2312&#39;);
로그인 후 복사


감시 문자열 함수

UTF8 인코딩에서는 한자 1개가 3바이트를 차지합니다

코드는 다음과 같습니다.

function msubstr($str, $start, $len) {
 $tmpstr = "";
 $strlen = $start + $len;
 for($i = 0; $i < $strlen; $i++){
  if(ord(substr($str, $i, 1)) > 127){
   $tmpstr.=substr($str, $i, 3);
   $i+=2;
  }else
   $tmpstr.= substr($str, $i, 1);
 }
 return $tmpstr;
}
echo msubstr("一二三天下致公english",0,10);
로그인 후 복사


GB2312 인코딩, gb2312에서는 한자가 2바이트를 차지합니다.

코드는 다음과 같습니다

<?php
function msubstr($str, $start, $len) {   //ȡ
   $tmpstr = "";
   $strlen = $start + $len;
   if(preg_match(&#39;/[/d/s]{2,}/&#39;,$str)){$strlen=$strlen-2;}
   for($i = 0; $i < $strlen; $i++) {
       if(ord(substr($str, $i, 1)) > 0xa0) {
           $tmpstr .= substr($str, $i, 2);
           $i++;
       } else
           $tmpstr .= substr($str, $i, 1);
     }
   return $tmpstr;
 }
  
?>
로그인 후 복사


코딩 호환성이 좋은 함수

코드는 다음과 같습니다

function cc_msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true)
{
 if(function_exists("mb_substr"))
  return mb_substr($str, $start, $length, $charset);
 elseif(function_exists(&#39;iconv_substr&#39;)) {
  return iconv_substr($str,$start,$length,$charset);
 }
 $re[&#39;utf-8&#39;]   = "/[/x01-/x7f]|[/xc2-/xdf][/x80-/xbf]|[/xe0-/xef][/x80-/xbf]{2}|[/xf0-/xff]
[/x80-/xbf]{3}/";
 $re[&#39;gb2312&#39;] = "/[/x01-/x7f]|[/xb0-/xf7][/xa0-/xfe]/";
 $re[&#39;gbk&#39;]   = "/[/x01-/x7f]|[/x81-/xfe][/x40-/xfe]/";
 $re[&#39;big5&#39;]   = "/[/x01-/x7f]|[/x81-/xfe]([/x40-/x7e]|/xa1-/xfe])/";
 preg_match_all($re[$charset], $str, $match);
 $slice = join("",array_slice($match[0], $start, $length));
 if($suffix) return $slice."…";
 return $slice;
}
로그인 후 복사

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿