> 백엔드 개발 > PHP 튜토리얼 > PHP는 잘못된 문자(ord(), substr() 함수) 없이 중국어 문자열을 가로챕니다.

PHP는 잘못된 문자(ord(), substr() 함수) 없이 중국어 문자열을 가로챕니다.

WBOY
풀어 주다: 2016-07-25 08:56:53
원래의
1154명이 탐색했습니다.
本文介绍下,在php中截取中文字符串无乱码的二个函数,分别是ord()函数与substr()函数。有需要的朋友参考下。

在php编程中要注意:根据UTF-8编码规范,将3个连续的字符计为单个字符。

来看一段截取中文字符串的代码,如下:

<?php
function cut_str($sourcestr,$cutlength)  
{  
   $returnstr='';  
   $i=0;  
   $n=0;  
   $str_length=strlen($sourcestr);//字符串的字节数  
   while (($n<$cutlength) and ($i<=$str_length))  
   {  
      $temp_str=substr($sourcestr,$i,1);  
      $ascnum=Ord($temp_str);//得到字符串中第$i位字符的ascii码  
      if ($ascnum>=224)    //如果ASCII位高与224,  
      {  
$returnstr=$returnstr.substr($sourcestr,$i,3); //根据UTF-8编码规范,将3个连续的字符计为单个字符          
         $i=$i+3;            //实际Byte计为3  
         $n++;            //字串长度计1  
      }  
      elseif ($ascnum>=192) //如果ASCII位高与192,  
      {  
         $returnstr=$returnstr.substr($sourcestr,$i,2); //根据UTF-8编码规范,将2个连续的字符计为单个字符  
         $i=$i+2;            //实际Byte计为2  
         $n++;            //字串长度计1  
      }  
      elseif ($ascnum>=65 && $ascnum<=90) //如果是大写字母,  
      {  
         $returnstr=$returnstr.substr($sourcestr,$i,1);  
         $i=$i+1;            //实际的Byte数仍计1个  
         $n++;            //但考虑整体美观,大写字母计成一个高位字符  
      }  
      else                //其他情况下,包括小写字母和半角标点符号,  
      {  
         $returnstr=$returnstr.substr($sourcestr,$i,1);  
         $i=$i+1;            //实际的Byte数计1个  
         $n=$n+0.5;        //小写字母和半角标点等与半个高位字符宽...  
      }  
   }  
         if ($str_length>$i){  
          $returnstr = $returnstr . "...";//超过长度时在尾处加上省略号  
      }  
    return $returnstr;  
}
로그인 후 복사

以上代码实现对utf-8编码的字符串进行按字数剪切,其中如果要在剪切字母的时候也算成一个字的话就要把$n=$n 0.5;改成$n=$n 1;

另外,要说明的是,php提供了自带的处理函数,使用 mb_substr($str,int,int,'utf-8');即可实现此功能。 其中的参数分别为目标字符串$str,开始截取位置int,截取长度int,截取后的字符编码(utf-8)。

返回结果: 从开始位置(开始位置的字符算在长度之内)的int个字符。

例如:

$str = '性的规定可广泛的覆盖大沙发扩大双方';
echo mb_substr($str,7,3,'utf-8');
로그인 후 복사

输出结果: 的覆盖 三个字



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