>백엔드 개발 >PHP 튜토리얼 >PHP에서 중국어 문자열의 길이를 계산하고 중국어 문자열을 가로채는 함수 예제에 대한 자세한 설명

PHP에서 중국어 문자열의 길이를 계산하고 중국어 문자열을 가로채는 함수 예제에 대한 자세한 설명

怪我咯
怪我咯원래의
2017-07-04 11:54:171119검색

PHP 개발을 하다 보면 우리나라의 언어 환경 문제로 인해 중국어를 다루어야 하는 경우가 많습니다.

PHP에는 중국어의 길이를 가로채서 계산할 수 있는 특별한 mb_substr 및 mb_strlen 함수가 있다는 것을 우리 모두 알고 있습니다. 그러나 이러한 함수는 PHP의 핵심 함수가 아니기 때문에 자주 사용됩니다. 켜져 있지 않을 수 있습니다. 물론, 자체 서버를 사용하는 경우 php.ini에서만 활성화하면 됩니다. 가상 호스트를 사용하고 있고 서버에서 이 기능을 활성화하지 않는 경우 국가 상황에 맞는 일부 기능을 작성해야 합니다.
다음 기능은 사용하기 매우 쉽습니다. 하지만 반드시 utf-8 환경에서 사용해야 한다는 점을 아셔야 합니다.

코드는 다음과 같습니다.

header('Content-type:text/html;charset=utf-8'); 
/** 
* 可以统计中文
字符串
长度的函数 
* @param $str 要计算长度的字符串 
* @param $type 计算长度类型,0(默认)表示一个中文算一个字符,1表示一个中文算两个字符 
* 
*/ 
function abslength($str) 
{ 
if(empty($str)){ 
return 0; 
} 
if(function_exists('mb_strlen')){ 
return mb_strlen($str,'utf-8'); 
} 
else { 
preg_match_all("/./u", $str, $ar); 
return count($ar[0]); 
} 
} 
$str = '我们都是中国人啊,ye!'; 
$len = abslength($str); 
var_dump($len); //return 12 
$len = abslength($str,'1'); 
echo &#39;<br />&#39;.$len; //return 22 
/* 
utf-8编码下截取中文字符串,参数可以参照substr函数 
@param $str 要进行截取的字符串 
@param $start 要进行截取的开始位置,负数为反向截取 
@param $end 要进行截取的长度 
*/ 
function utf8_substr($str,$start=0) { 
if(empty($str)){ 
return false; 
} 
if (function_exists(&#39;mb_substr&#39;)){ 
if(func_num_args() >= 3) { 
$end = func_get_arg(2); 
return mb_substr($str,$start,$end,&#39;utf-8&#39;); 
} 
else { 
mb_internal_encoding("UTF-8"); 
return mb_substr($str,$start); 
} 
} 
else { 
$null = ""; 
preg_match_all("/./u", $str, $ar); 
if(func_num_args() >= 3) { 
$end = func_get_arg(2); 
return join($null, 
array_slice
($ar[0],$start,$end)); 
} 
else { 
return join($null, array_slice($ar[0],$start)); 
} 
} 
} 
$str2 = &#39;wo要截取zhongwen&#39;; 
echo &#39;<br />&#39;; 
echo utf8_substr($str2,0,-4); //return wo要截取zhon


gb2312, gbk, utf-8, big5 중국어 차단 방법을 지원합니다.

코드는 다음과 같습니다.

/* 
* 中文截取,支持gb2312,gbk,utf-8,big5 
* 
* @param string $str 要截取的字串 
* @param int $start 截取起始位置 
* @param int $length 截取长度 
* @param string $charset utf-8|gb2312|gbk|big5 编码 
* @param $suffix 是否加尾缀 
*/ 
public function csubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) 
{ 
if(function_exists("mb_substr")) 
{ 
if(mb_strlen($str, $charset) <= $length) return $str; 
$slice = mb_substr($str, $start, $length, $charset); 
} 
else 
{ 
$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); 
if(count($match[0]) <= $length) return $str; 
$slice = join("",array_slice($match[0], $start, $length)); 
} 
if($suffix) return $slice."…"; 
return $slice; 
}

위 내용은 PHP에서 중국어 문자열의 길이를 계산하고 중국어 문자열을 가로채는 함수 예제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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