이 글은 중국어 문자열길이의 통계를 구현하기 위한 php커스텀 함수의 방법을 주로 소개합니다. 중국어 판단, 인코딩, 연산과 관련된 PHP의 연산 기술을 정리하고 분석한 내용입니다. 도움이 필요한 친구들이 참고할 수 있습니다. to it
이 글의 예에서는 PHP 사용자 정의 함수를 사용하여 중국어 문자열의 길이를 계산하는 방법을 설명합니다. 참고를 위해 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.
한자는 2자로 계산되고, 영어 문자는 1로 계산됩니다.
code
/** * 可以统计中文字符串长度的函数 * */ function abslength($str) { $len=strlen($str); $i=0; while($i<$len) { if(preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/",$str[$i])) { $i+=2; } else { $i+=1; } } return $i; }
또 다른: PHP가 문자 길이를 결정합니다: 중국어, 영어 , 숫자.
이를 수행하는 방법에는 여러 가지가 있습니다. 간단한 것을 녹음해 보세요.
mb_strlen($str, 'GBK');
단점은 mb 라이브러리를 설치해야 한다는 것입니다.
그러나 아직 해결해야 할 문제가 몇 가지 있습니다.
GB 코드 인코딩 규칙은 다음과 같습니다. 각 한자는 2바이트로 구성되며 첫 번째 바이트 범위는 0XA1-0XFE이며 총 96가지 유형입니다. 두 번째 바이트의 범위는 각각 0XA1-0XFE이며 총 96가지 유형입니다. 이 2바이트를 사용하여 총 96 * 96 = 8836개의 한자를 정의할 수 있습니다. 실제로 총 6763개의 한자가 있습니다.
BIG5 코드 인코딩 규칙은 다음과 같습니다: 각 한자는 2바이트로 구성되며 첫 번째 바이트 범위는 0X81-0XFE이며 총 126개 유형입니다. 두 번째 바이트의 범위는 0X40-0X7E, 0XA1-0XFE, 총 157개 유형이다. 즉, 이 2바이트를 이용하면 총 126*157=19782개의 한자를 정의할 수 있다. 이러한 한자 중 Yi, D와 같이 우리가 일반적으로 사용하는 문자는 일반적으로 사용되는 문자라고 하며 해당 BIG5 코드의 범위는 0XA440부터 0XC671까지 총 5401자입니다. "tan" 및 "diao"와 같이 덜 일반적으로 사용되는 문자를 하위 공통 문자라고 하며 0XC940부터 0XF9FE까지 총 7652자입니다. 나머지는 일부 특수 문자입니다.
더 안전한 방법입니다.
function StrLenW($str) { $count = 0; $len = strlen($str); for($i=0; $i<$len; $i++,$count++) if(ord($str[$i])>=128) $i++; return $count; }
마지막으로 다음은 정확하고 보편적입니다!
코드:
/**作用:统计字符长度包括中文、英文、数字 * 参数:需要进行统计的字符串、编码格式目前系统统一使用UTF-8 * 修改记录: $str = "kds"; echo sstrlen($str,'utf-8'); * */ function sstrlen($str,$charset) { $n = 0; $p = 0; $c = ''; $len = strlen($str); if($charset == 'utf-8') { for($i = 0; $i < $len; $i++) { $c = ord($str{$i}); if($c > 252) { $p = 5; } elseif($c > 248) { $p = 4; } elseif($c > 240) { $p = 3; } elseif($c > 224) { $p = 2; } elseif($c > 192) { $p = 1; } else { $p = 0; } $i+=$p;$n++; } } else { for($i = 0; $i < $len; $i++) { $c = ord($str{$i}); if($c > 127) { $p = 1; } else { $p = 0; } $i+=$p;$n++; } } return $n; }
위 내용은 사용자 정의 함수를 사용하여 PHP에서 중국어 문자열 길이를 계산하는 방법에 대한 자세한 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!