中文汉字截取函数(支持gb2312、big5、UTF-8)

转载 2004年07月02日 09:44:00
  这是这几天我在工作中因为项目需要写的一个中文汉字截取函数:

<?
#============================================================================
# 中文字符串截取函数
# 参数说明:
# $fStr:需要截最的原始字符串;
# $fStart:从第几个汉字后开始载取,从头开始截取使用 0
# $fLen:截取几个汉字
# $fCode:原始字符串的编码方式,默认为 gb2312 或 big5,UTF-8 按 UTF-8 编码方式截取
#----------------------------------------------------------------------------
Function msubstr ($fStr, $fStart, $fLen, $fCode = "") {
    switch (
$fCode) {
        case
"UTF-8" :
            
preg_match_all("/[/x01-/x7f]|[/xc2-/xdf][/x80-/xbf]|/xe0[/xa0-/xbf][/x80-/xbf]|[/xe1-/xef][/x80-/xbf][/x80-/xbf]|/xf0[/x90-/xbf][/x80-/xbf][/x80-/xbf]|[/xf1-/xf7][/x80-/xbf][/x80-/xbf][/x80-/xbf]/", $fStr, $ar);  
            if(
func_num_args() >= 3) {  
                if (
count($ar[0])>$fLen) {
                    return
join("",array_slice($ar[0],$fStart,$fLen))."...";
                }
                return
join("",array_slice($ar[0],$fStart,$fLen));
            } else {  
                return
join("",array_slice($ar[0],$fStart));
            }
            break;
        default:
            
$fStart = $fStart*2;
            
$fLen   = $fLen*2;
            
$strlen = strlen($fStr);
            for (
$i = 0; $i < $strlen; $i++ ) {
                if (
$i >= $fStart && $i < ( $fStart+$fLen ) ) {
                    if (
ord(substr($fStr, $i, 1)) > 129 ) $tmpstr .= substr($fStr, $i, 2);
                    else
$tmpstr .= substr($fStr, $i, 1);
                }
                if (
ord(substr($fStr, $i, 1)) > 129 ) $i++;
            }
            if (
strlen($tmpstr) < $strlen ) $tmpstr .= "...";
            Return
$tmpstr;
    }
}
?>



使用举例:

<?
$a
= "一二三四五六七八九十";
$b = iconv("gb2312","UTF-8",$a);
echo
"a = ".msubstr($a,0,5)."<br>";
echo
"b = ".msubstr($b,0,5,"UTF-8")."<br>";
?>



        输出结果均是“一二三四五...”,如果有中英文混编,也不会出现只截取汉字半边字符的问题。

中文截取,支持gb2312,gbk,utf-8,big5

/**  * @todo 中文截取,支持gb2312,gbk,utf-8,big5  *  * @param string $str 要截取的字串  * @param int $start 截...
  • kingdtl
  • kingdtl
  • 2012年09月20日 10:10
  • 265

中文字符编码简介 GB2312/GBK/GB18030/BIG5

1 GB2312-80GB2312码是中华人民共和国国家汉字信息交换用编码,全称《信息交换用汉字编码字符集——基本集》,由国家标准总局发布,1981年5月1日实施,通行于大陆。新加坡等地也使用此编码。...
  • liujinchengjx
  • liujinchengjx
  • 2007年03月13日 14:34
  • 13429

putty GB2312 & BIG5 中文字符集补丁

putty 中如果一种不支持中文字符集的 monospace 字体,一般选择了就没法输入中文了。UTF8编码倒是配置字符集,但是ANSI的 GB2312 & BIG5 字符集一直不支持,除非选择支持G...
  • force_eagle
  • force_eagle
  • 2015年08月21日 11:24
  • 3677

URL链接中汉字乱码转UTF-8和gb2312

在使用URL向服务器提交数据的时候,如果我们提交的数据中存在汉字,就会出现下列情况 http://192.168.11.22/cgi-bin/serial.cgi?type=text&text=%C...
  • u011037149
  • u011037149
  • 2016年04月02日 18:45
  • 1206

字符编码 GB2312,UTF-8,GBK,BIG5

关于字符编码 GB2312,UTF-8,GBK,BIG5 你是否对字符编码的问题还是不了解,是否遇到过文件乱码的问题呢,看到 ANSI,GB2312,GBK,latin-1,cp936,euc-...
  • chinmusam
  • chinmusam
  • 2012年05月04日 10:55
  • 3497

PHP Big5 Utf-8 GB2312 相互转码解决办法

编写 PHP 代码的过程中,经常会遇到需要对中文转码的问题,如 GB2312 Unicode、GB2312 Big5 等等。如果 PHP 编译时带有 mbstring 的话,可以使用 Multi-...
  • yethyeth
  • yethyeth
  • 2009年05月04日 21:49
  • 4234

将汉字转成GB2312放进网址进行请求

今天抓接口的时候发现接口中有汉字,放进浏览器打开,发现无法da'k'i
  • fublog
  • fublog
  • 2014年10月07日 15:55
  • 599

UTF-8和中文字符编码(GB2312、GBK、GIB5、GB18030)的识别

1、编码方式介绍 了解一种字符集编码主要是要了解该编码的编码范围,编码对应的字符集(都包含哪些字符),和其他字符集编码之间的关系等。 ASCII ASCII码是7位编码,编码范围是0...
  • u013093948
  • u013093948
  • 2016年01月18日 11:34
  • 2593

GB2312 转化为 UTF-8 中文乱码

爬虫项目中,有网页是使用 gb2312 编码的,在将网页内容转化为 UTF-8 后发现有些中文乱码了,...
  • lizhihaoweiwei
  • lizhihaoweiwei
  • 2014年05月28日 14:00
  • 529

C++: BIG5到GB

C++: BIG5到GB (11/03/1999)   中文因为数量太多,所以与英文用ASCII码一个字节表示不同,它使用两个字节来表示。通过计算这两个字节,我们可以得到其表示的汉字在中文字库中的位置...
  • ghj1976
  • ghj1976
  • 2000年11月28日 07:24
  • 2053
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:中文汉字截取函数(支持gb2312、big5、UTF-8)
举报原因:
原因补充:

(最多只允许输入30个字)