>백엔드 개발 >PHP 튜토리얼 >PHP가 중국어 함수 utf_substr을 가로챕니다.

PHP가 중국어 함수 utf_substr을 가로챕니다.

WBOY
WBOY원래의
2016-07-25 08:58:44896검색
  1. $tmp = preg_replace('/[一-龥]/u','<@>','你好我是谁?123abc');
  2. /u是UTF-8
复制代码

代码1,PHP截取UTF-8字符串,解决半字符问题

  1. /***

  2. * PHP截取UTF-8字符串,解决半字符问题。utf_substr
  3. * 英文、数字(半角)为1字节(8位),中文(全角)为3字节
  4. * @return 取出的字符串, 当$len小于等于0时, 会返回整个字符串
  5. * @param $str 源字符串
  6. * $len 左边的子串的长度
  7. * @edit bbs.it-home.org
  8. function utf_substr($str,$len){
  9. for($i=0;$i<$len;$i ){
  10. $temp_str=substr($str,0,1);
  11. if(ord($temp_str) > 127){
  12. $i ;
  13. if($i<$len){
  14. $new_str[]=substr($str,0,3);
  15. $str=substr($str,3);
  16. }
  17. }else{
  18. $new_str[]=substr($str,0,1);
  19. $str=substr($str,1);
  20. }
  21. }
  22. return join($new_str);
  23. }

  24. //调用示例

  25. $str = utf_substr('你好',4);
  26. echo $str;
  27. ?>

复制代码

代码2,截取utf-8字符串函数

  1. /**

  2. * 截取utf-8字符串
  3. * edit bbs.it-home.org
  4. */
  5. function cut_str($sourcestr,$cutlength){
  6. $returnstr='';
  7. $i=0;
  8. $n=0;
  9. $str_length=strlen($sourcestr);//字符串的字节数
  10. while (($n<$cutlength) and ($i<=$str_length)){
  11. $temp_str=substr($sourcestr,$i,1);
  12. $ascnum=Ord($temp_str);//得到字符串中第$i位字符的ascii码
  13. if ($ascnum>=224){ //如果ASCII位高与224,
  14. $returnstr=$returnstr.substr($sourcestr,$i,3); //根据UTF-8编码规范,将3个连续的字符计为单个字符
  15. $i=$i 3; //实际Byte计为3
  16. $n ; //字串长度计1
  17. }elseif ($ascnum>=192){ //如果ASCII位高与192,
  18. $returnstr=$returnstr.substr($sourcestr,$i,2); //根据UTF-8编码规范,将2个连续的字符计为单个字符
  19. $i=$i 2; //实际Byte计为2
  20. $n ; //字串长度计1
  21. }elseif ($ascnum>=65 && $ascnum<=90){ //如果是大写字母,
  22. $returnstr=$returnstr.substr($sourcestr,$i,1);
  23. $i=$i 1; //实际的Byte数仍计1个
  24. $n ; //但考虑整体美观,大写字母计成一个高位字符
  25. }else{ //其他情况下,包括小写字母和半角标点符号,
  26. $returnstr=$returnstr.substr($sourcestr,$i,1);
  27. $i=$i 1; //实际的Byte数计1个
  28. $n=$n 0.5; //小写字母和半角标点等与半个高位字符宽...
  29. }
  30. }
  31. if ($str_length>$cutlength){
  32. $returnstr = $returnstr . "...";//超过长度时在尾处加上省略号
  33. }
  34. return $returnstr;
  35. }

  36. //调用示例

  37. $str = '你好!我好';
  38. $str = cut_str($str,3);
  39. echo $str;
  40. ?>

复制代码


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