博客首页 注册 建议与交流 排行榜 加入友情链接         宝宝相册的专门空间
推荐 投诉 搜索: 帮助

中国软件开发组

qiyu15555.cublog.cn


关于PHP的字串截取[substr()扩展]
总结一下吧,关于PHP的字串截取[substr()扩展]
PHP提供了很多很实用的函数,PHP在字符串操作上有很深的造诣,这段时间这方面用应用比较多,总结一下吧。
下面是手册上的描述:
substr -- Return part of a string
Description
string substr ( string string, int start [, int length])
   这可能是我们用得最多的一个函数了,它接收一个字串,再返回一个字串,中间根据参数限定返回的长度。但是很多新手用的时候可能会遇到一点麻烦
因为它对中文的支持不大好,时不时会出现比如一个?类似的结果,这样我们就需要对其进行扩展了。
   下面我给出我常用的两个函数吧!我加上了比较详尽的注释(两种),大家可以多了解一些汉字编码方面的知识。
第一种:
function substr_for($str,$start,$len)    //str就是要进行截取字串
{
    $totlelength = strlen($str);
   
    //特例情况
    if ($len == null) $len = $totlelength;
    if ($len ==0) return "";
    if ($len >= $totlelength && $start == 0 ) return $str;
    if ($start > $totlelength) return "";
    //分析$start
    if ($start < 0 )//$start<0时,转化为$start>0时的定位.
    {
        if ( abs($start) >= $totlelength ) $start = 0;
        else $start = $totlelength - abs($start);
     }
    //确定起始位置,当起始位拆分某汉字时,返回值包含此汉字.
    if ($start > 0)
    {
        $i = $start-1;
        $flag = -1;
        while ($i >= 0)
        {
            if ( ord(substr($str,$i,1)) > 160)
            {
               $flag = -1*$flag;
            }
            else break;
            $i--;
        }
        if($flag==1)
        {
            $start = $start - 1;
            $len++;  //保证不位移.
        }
    }
    $str = substr($str,$start);//截除字符串$str的$start位前的字符
    $totlelength = strlen($str);
    //确定结束位置,当结束位拆分某汉字时,返回值不包含此汉字.
    if ($len<0) $len = $totlelength - abs($len);
    if ($len <= 0) return "";
    $i=min($len,$totlelength);
    $i--;
    $flag = -1;
    while ($i >= 0){
        if (ord(substr($str,$i,1))>160){
            $flag=-1*$flag;
        }else break;
        $i--;
  }
    if($flag == 1)$len=$len-1;
    $subit=substr($str,0,$len);
    return $subit;
}

第二种:
function substrgb($str,$start,$len){
    for($i=0;$i<$start+$len;$i++){
        $tmpstr=(ord($str[$i])>=161 && ord($str[$i])<=247&& ord($str[$i+1])>=161 && ord($str[$i+1])<=254)?$str[$i].$str[++$i]:$tmpstr=$str[$i];
        if ($i>=$start&&$i<($start+$len))$tmp .=$tmpstr;
    }
    return $tmp;
}
如果有更好的,希望大家分享一下,可以直接贴在下面,要先COPY到NOTEPAD,然后再COPY出来贴上,不然发布不了。这么久没有更新了发现还是有很多朋来看这个BLOG,进后台才知又改版了。

发表于: 2004-09-30 ,修改于: 2006-10-20 18:25,已浏览1047次,有评论3条 推荐 投诉


网友评论
内容:
有好的东东要分享啊
angelover评论于:2006-10-19 10:25:50 (125.78.48.★)
内容:
有好的东东要分享啊
angelover评论于:2006-10-19 10:26:17 (125.78.48.★)
内容:
关键词:虚拟主机 空间租用 免费空间 ASP空间 PHP空间 NET空间  ASP虚拟主机 
PHP虚拟主机 NET虚拟 BLOG虚拟主机 全能虚拟主机 全能空间 数据库 程序虚拟主机 

全国第一家虚拟主机:支持伪静态.有利于提高排名

15G全能空间年付500元/月付50元 可免费试用
5GB 独立WEB空间、5GB 企业邮箱空间、5GB MSSQL数据库 
IIS连接数据 500 个、500GB/月流量、共享日志文件空间 

企业邮箱功能 
赠送5GB 超大企业邮箱,500个Email企业邮箱用户 
自动回复、自动转发、POP3、SMTP收发信、SMTP发信认证 
邮件过滤、邮件拒收、邮件夹管理、邮件域管理、定制邮件数 

数据库功能 
支持5GB MSSQL数据库空间,5个用户数据库、Access 

主机功能支持 
采用安全稳定的Win2003 .net2.0 架构 
支持ASP、PHP、ASP.NET、PERL等脚本、支持自定义CGI 
全面支持.net2.0版本,独立的Application应用池,
支持SSI(Shtml),支持FrontPage扩展 
可免费自行绑定5个域名、500个解析、500个子域名 


详情咨询021-51695858   QQ:1209636

官方网站: www.abcnic.com 
time1984 评论于:2007-07-23 16:10:23 (218.82.214.★)

发表评论