喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

$5.95 Web Hosting     

上一主题 下一主题
     
标题: [原创] 提供个等长中文截取函数  
 
剑枫 (雪花)
论坛元老
Rank: 8Rank: 8
欧玛嘎


UID 26144
精华 1
积分 4855
帖子 1727
金钱 4845 喜悦币
威望 10
人脉 0
阅读权限 90
注册 2004-2-14
来自 山东郓城
状态 离线
[广告]: 代充Paypal帐号美元
提供个等长中文截取函数

看到有人要截取函数,提供个。
望高手指教

一般我们截取字符串,目的是在列表时标题保持长度相等,但是纯英文截取时候和纯中文截取时候,长度会有很大差异,汉字占两个字符长度的。。。。。。
所以偶弄的这个是等长截取

<?php
include('CutString.php');
//假设要从第二个字符开始截取10个汉字长度的字符串

//情况一:纯中文字符串
$_S1 = '我是中国人我爱我的祖国';

//情况二:英文或数字符号字符串
$_S2 = 'abcdefg1234567!@#$%^^&**(()_';

//情况三:混合中文字符串
$_S3 = '我是boy1234*%混合字符串';

//看看三次截取结果长度,是等长的
echo CutString($_S1, 10,2,1);
echo '<BR>';
echo CutString($_S2, 10,2,1);
echo '<BR>';
echo CutString($_S3, 10,2,1);

/***
中国人我爱我的祖国..
efg1234567!@#$%^^&*..
boy1234*%混合字符串..
***/
?>
默认位utf8编码,$_Encode随便设置则为gb2312编码

函数代码如下:

<?php
/***************************************************************************
*                        CutString.php
*                ------------------------------
*        Date                : Oct 20, 2005
*        Run                : Php4.1.1, Php5.0
*        Copyright        : (C) 2005 - DreamSoft Co.,Ltd.
*        Mail                : Dream@Dreamsoft.Ca
*        Author                : Egmax
*
*        作用:中文截取
*
*
***************************************************************************/

function CutString($_String, $_Length, $_Start=0, $_Encode='UTF-8')
{
        $v = 0;
        if($_Encode == 'UTF-8')
        {
                $_Pa = "/[\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]/";
                preg_match_all($_Pa, $_String, $_Rarray);
                $_SLength = count($_Rarray[0]);
                if($_SLength < $_Length) return $_String;
                for($i=$_Start; $i<$_SLength; $i++)
                {
                        if($v >= $_Length * 2 - 1) return $_RS.'..';
                        if(ord($_Rarray[0][$i]) > 129) $v += 2;
                        else $v++;
                        $_RS .= $_Rarray[0][$i];
                }
        } else {
                $_Start  = $_Start  * 2;
                $_Length = $_Length * 2;
                $_Len    = strlen($_String);
                if($_Len < $_Length) return $_String;
                $_Rstring= '';
                for($i=$_Start; $i<$_Len; $i++)
                {
                        if($v >= $_Length - 1) return $_Rstring.'..';
                        if(ord(substr($_String, $i, 1)) > 129) { $_Rstring .= substr($_String, $i, 2); $v += 2; $i++; }
                        else { $_Rstring .= substr($_String, $i, 1); $v++; }
                }
                return $_Rstring.'..';
        }
}

?>
根据字体的不同可能看起来不等长,比如村子的字体,英文显得长点。。
在村子发代码格式有很大变化,可以下载附件。

[ 本帖最后由 剑枫 于 2006-11-28 04:52 PM 编辑 ]


 附件: 您所在的用户组无法下载或查看附件



在场外支持奥运.....
2006-11-28 04:47 PM#1
查看资料  访问主页  发短消息  QQ  顶部
 
hivon (小P孩)
金牌会员
Rank: 6Rank: 6
风呼啦啦地飘


UID 28112
精华 0
积分 1099
帖子 644
金钱 735 喜悦币
威望 0
人脉 364
阅读权限 70
注册 2004-4-26
来自 广东深圳
状态 离线
[广告]: 代充Paypal帐号美元
好,狂顶...



俺的文章管理系统,请多指教
2006-11-28 06:12 PM#2
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
cnstudent (cnstudent)
注册会员
Rank: 2
初级会员



UID 67686
精华 1
积分 101
帖子 67
金钱 91 喜悦币
威望 10
人脉 0
阅读权限 20
注册 2006-1-2
状态 离线
[推荐阅读] 一个36M的sql文件为什么导入不了
看看我写得怎么样..?
http://www.phpx.com/happy/viewthread.php?tid=126860
2006-11-28 06:18 PM#3
查看资料  发短消息  顶部
 
剑枫 (雪花)
论坛元老
Rank: 8Rank: 8
欧玛嘎


UID 26144
精华 1
积分 4855
帖子 1727
金钱 4845 喜悦币
威望 10
人脉 0
阅读权限 90
注册 2004-2-14
来自 山东郓城
状态 离线
[推荐阅读] 北京,国贸附近招PHP网站程序员


QUOTE:
原帖由 cnstudent 于 2006-11-28 06:18 PM 发表
看看我写得怎么样..?
http://www.phpx.com/happy/viewthread.php?tid=126860
不错




在场外支持奥运.....
2006-11-28 09:23 PM#4
查看资料  访问主页  发短消息  QQ  顶部
 
smallipis (smallipis)
高级会员
Rank: 4
一般会员



UID 66599
精华 0
积分 509
帖子 220
金钱 509 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2005-9-13
状态 离线
[推荐阅读] 机会就在你眼前,成功就在于你的选择
顶。。。。又是这高人发的。。。
2006-11-29 08:38 PM#5
查看资料  发短消息  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.023678 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP