用户名:
密 码: 记住
您当前的位置:首页 > 网络编程 > php教程

PHP中UTF8中文字符截断程序代码

时间:2015-01-23  来源:西部数据  作者:西部数据

最简单的字符截取函数是用php自带的substr(),其实,PHP原生就有多charset下字符截取方案,额,所以就是这个样子...??.

Multibyte String Functions函数族中,string mb_substr ( string $str , int $start [, int $length [, string $encoding ]] ) 用来字符串截取

int mb_strlen (string $str [,string $encoding ] ) 返回字符串长度

但它只支持数字与字母不支持中文.

实例,UTF8中文字符截断,代码如下:

  1. <?php 
  2.  /* UTF-8中文字符截断程序 */ 
  3.  
  4.  
  5.  $str = "123这是测试字符串"
  6.  $str1 = "()()"
  7.  echo subUTF8str($str,0,3)."<br>"
  8.  echo subUTF8str($str,0,4)."<br>"
  9.  echo subUTF8str($str1,0,4)."<br>"
  10.  echo subUTF8str($str1,0,10)."<br>"
  11.  
  12.  function subUTF8str($str,$start=0,$length=80){  
  13.     $cur_len = 0; //人理解的字符串长度 
  14.     $all_len = strlen($str); //机器理解字符串长度 
  15.     if($length > $all_len
  16.     { 
  17.          return $str
  18.     } 
  19.     for($i = 0;$i < $all_len;) 
  20.     { 
  21.          if($cur_len == $start
  22.          { 
  23.              break
  24.          } 
  25.          if (ord($str[$i]) > 127) 
  26.          { 
  27.              $i += 3; 
  28.          }else
  29.              $i += 1; 
  30.          } 
  31.          $cur_len ++; 
  32.     } 
  33.      $start_pos = $i
  34.      $temp_pos = $cur_len
  35.      for(;$cur_len - $temp_pos < $length;) 
  36.      { 
  37.          if($i >= $all_len
  38.              break
  39.          if (ord($str[$i]) > 127) 
  40.          { 
  41.              $i += 3; 
  42.          }else
  43.              $i += 1; 
  44.          } 
  45.          $cur_len ++; 
  46.      } 
  47.      $end_pos = $i
  48.      return substr($str,$start_pos,$end_pos); 
  49.  }  
  50.  ?> 

改进后我们把它分页,这样可支持ut8与gbk等中文字符截取,代码如下:

  1. function substrs($content$length){ 
  2.  if($length && strlen($content)>$length){ 
  3.   if($db_charset!='utf-8'){ 
  4.    $retstr=''
  5.    for($i = 0; $i < $length - 2; $i++) { 
  6.     $retstr .= ord($content[$i]) > 127 ? $content[$i].$content[++$i] : $content[$i]; 
  7.    } 
  8.    return $retstr
  9.   }else
  10.    return utf8_trim(substr($content,0,$length*3)); 
  11.   } 
  12.  } 
  13.  return $content
  14.  
  15. function utf8_trim($str) { 
  16.  $len = strlen($str); 
  17.  for($i=strlen($str)-1;$i>=0;$i-=1){ 
  18.   $hex .= ' '.ord($str[$i]); 
  19.   $ch   = ord($str[$i]); 
  20.   if(($ch & 128)==0) return substr($str,0,$i); 
  21.   if(($ch & 192)==192)return substr($str,0,$i); 
  22.  } 
  23.  return($str.$hex); 
来顶一下
返回首页
返回首页
推荐资讯
WiFi太不安全:7岁女孩11分钟内入侵公共网络 WiFi太不安全:7岁女孩11分钟内入侵近期刚刚发布研究说WiFi网络能获得人们手机里多少私人信息,
不服跑个分?人工智能也出现“刷分”乱象 不服跑个分?人工智能也出现“刷分2014年,人工智能领域突然爆发,成为了科研和科技创业的热门
相关文章
    无相关信息
栏目更新
栏目热门