免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 9618 | 回复: 20

谁有截取中文字符串的函数 [复制链接]

论坛徽章:
0
发表于 2004-11-29 14:37 |显示全部楼层
想从很长的字符串中截取一部份但是不能出现乱码的函数,我用过string_cut 但是有时候截取的位空!

论坛徽章:
0
发表于 2004-11-29 15:13 |显示全部楼层

谁有截取中文字符串的函数

自己刚才看了一个文档,初步写了一个如果有需要的可以改一改,嘿嘿
#cut string
#截取字符数
function string_cut($string,$length = 100){
    if (strlen($string)<= $length){return $string;}
        $j=0;
        #get cut position
        #根据所过字符长度确定最后字符的位置
        $pos=$length-1;
        #char of cut pos  is not chinese
        #截取位置字符非汉字
        if($string{$pos}<=12{$cut_string=substr($string,0,$length);}
        #check chinese number total
        #检查中文字符的字节数
        for($i=0; $i < $length; $i++){
            if (ord($string{$i}) >; 12{$j++;}
        }
        #the bytes number of  chinese char is even
        #中文字符字节数为偶数
        if(!($j%2)){
            $cut_string=substr($string,0,$length);
        }else{
            $cut_string=substr($string,0,$length-1);
        }
    return $cut_string."...";
}

论坛徽章:
0
发表于 2004-11-29 15:14 |显示全部楼层

谁有截取中文字符串的函数

排版怎么那么难看了?

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
发表于 2004-11-29 22:32 |显示全部楼层

谁有截取中文字符串的函数

这个是标准的函数:

  1. function Short_Text($title,$titlelen=20)
  2. {
  3.    $len = strlen($title);

  4.    if ($len <= $titlelen):
  5.      $title = $title;
  6.    else:
  7.      $title = substr($title,"0","$titlelen");
  8.      $parity= 0;
  9.      for($i=0;$i<$titlelen;$i++){
  10.         $temp_str=substr($title,$i,1);
  11.         if(Ord($temp_str)>;127) $parity+=1;
  12.      }
  13.      if($parity%2==1) $title=substr($title,0,($titlelen-1))."...";
  14.      else $title=substr($title,0,$titlelen)."...";
  15.    endif;
  16.    return $title;
  17. }
复制代码

论坛徽章:
0
发表于 2004-11-30 09:01 |显示全部楼层

谁有截取中文字符串的函数

原理都一样的

论坛徽章:
0
发表于 2004-11-30 20:28 |显示全部楼层

谁有截取中文字符串的函数

楼上的,那不叫标准。下面这个,唠叨写的,用法和substr一样:

  1.     function c_substr($str, $start = 0) {
  2.         $ch = chr(127);
  3.         $p = array("/[\x81-\xfe]([\x81-\xfe]|[\x40-\xfe])/", "/[\x01-\x77]/");
  4.         $r = array("", "");
  5.         if(func_num_args() >; 2)
  6.             $end = func_get_arg(2);
  7.         else
  8.             $end = strlen($str);
  9.         if($start < 0)
  10.             $start += $end;
  11.    
  12.         if($start >; 0) {
  13.             $s = substr($str,0,$start);
  14.             if($s[strlen($s)-1] >; $ch) {
  15.                 $s = preg_replace($p,$r,$s);
  16.                 $start += strlen($s);
  17.             }
  18.         }
  19.         $s = substr($str,$start,$end);
  20.         $end = strlen($s);
  21.         if($s[$end-1] >; $ch) {
  22.             $s = preg_replace($p,$r,$s);
  23.             $end += strlen($s);
  24.         }
  25.         return substr($str, $start, $end);
  26.     }
复制代码

论坛徽章:
0
发表于 2004-11-30 23:58 |显示全部楼层

谁有截取中文字符串的函数

不错,PHP系统自带一个函数,用来截取各种字符集的字符串的,不过用起来不是很稳定,

论坛徽章:
0
发表于 2004-12-16 10:28 |显示全部楼层

谁有截取中文字符串的函数

我现在贴出 C++, perl, php的代码
查看我的blog, 总有一个适合你 : http://spaces.msn.com/members/childsix/Blog/cns!1pHhQNB9Y2fuMDKLccsb_05g!139.entry

论坛徽章:
0
发表于 2004-12-17 02:19 |显示全部楼层

谁有截取中文字符串的函数

哪个都行了,只要能实现功能就行了!!!!!!!

论坛徽章:
0
发表于 2005-11-17 00:51 |显示全部楼层
对GBK字符集的处理,以上方法是没有问题。

但是对UTF-8字符集的处理呢?以上方法就不行了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP