关于PHP的字串截取[substr()扩展]
时间:2006-10-18 来源:qiyu15555
总结一下吧,关于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时的定位.
{
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){
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=161 && ord($str[$i])=161 && ord($str[$i+1])=$start&&$i
如果有更好的,希望大家分享一下,可以直接贴在下面,要先COPY到NOTEPAD,然后再COPY出来贴上,不然发布不了。这么久没有更新了发现还是有很多朋来看这个BLOG,进后台才知又改版了。
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时的定位.
{
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){
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=161 && ord($str[$i])=161 && ord($str[$i+1])=$start&&$i
如果有更好的,希望大家分享一下,可以直接贴在下面,要先COPY到NOTEPAD,然后再COPY出来贴上,不然发布不了。这么久没有更新了发现还是有很多朋来看这个BLOG,进后台才知又改版了。
相关阅读 更多 +