手机
当前位置:查字典教程网 >编程开发 >php教程 >PHP截取中文字符串的问题
PHP截取中文字符串的问题
摘要:以下代码试用于GB2312编码,截取中文字符串是PHP中一个头疼的问题,解决方法是根据值是否大于等于128来判断是否是双字节字符,以避免出现...

以下代码试用于GB2312编码,截取中文字符串是PHP中一个头疼的问题,解决方法是根据值是否大于等于128来判断是否是双字节字符,以避免出现乱码的情况。但中英文混合、特殊符号等问题总是存在,现在写一个比较全面的,仅供参考:

程序说明:

1.len参数以中文字符为标准,1len等于2个英文字符,为了形式上好看些

2.如果将magic参数设为false,则中文和英文同等看待,取绝对的字符数

3.特别适用于用htmlspecialchars()进行过编码的字符串

4.能正确处理GB2312中实体字符模式(𖰰)

程序代码:

functionFSubstr($title,$start,$len="",$magic=true)

{

/**

*poweredbySmartpig

*mailto:d.einstein@263.net

*/

$length=0;

if($len=="")$len=strlen($title);

//判断起始为不正确位置

if($start>0)

{

$cnum=0;

for($i=0;$i<$start;$i++)

{

if(ord(substr($title,$i,1))>=128)$cnum++;

}

if($cnum%2!=0)$start--;

unset($cnum);

}

if(strlen($title)<=$len)returnsubstr($title,$start,$len);

$alen=0;

$blen=0;

$realnum=0;

for($i=$start;$i<strlen($title);$i++)

{

$ctype=0;

$cstep=0;

$cur=substr($title,$i,1);

if($cur=="&")

{

if(substr($title,$i,4)=="<")

{

$cstep=4;

$length+=4;

$i+=3;

$realnum++;

if($magic)

{

$alen++;

}

}

elseif(substr($title,$i,4)==">")

{

$cstep=4;

$length+=4;

$i+=3;

$realnum++;

if($magic)

{

$alen++;

}

}

elseif(substr($title,$i,5)=="&")

{

$cstep=5;

$length+=5;

$i+=4;

$realnum++;

if($magic)

{

$alen++;

}

}

elseif(substr($title,$i,6)==""")

{

$cstep=6;

$length+=6;

$i+=5;

$realnum++;

if($magic)

{

$alen++;

}

}

elseif(substr($title,$i,6)=="")

{

$cstep=6;

$length+=6;

$i+=5;

$realnum++;

if($magic)

{

$alen++;

}

}

elseif(preg_match("/",substr($title,$i,8),$match))

{

$cstep=strlen($match[0]);

$length+=strlen($match[0]);

$i+=strlen($match[0])-1;

$realnum++;

if($magic)

{

$blen++;

$ctype=1;

}

}

}else{

if(ord($cur)>=128)

{

$cstep=2;

$length+=2;

$i+=1;

$realnum++;

if($magic)

{

$blen++;

$ctype=1;

}

}else{

$cstep=1;

$length+=1;

$realnum++;

if($magic)

{

$alen++;

}

}

}

if($magic)

{

if(($blen*2+$alen)==($len*2))break;

if(($blen*2+$alen)==($len*2+1))

{

if($ctype==1)

{

$length-=$cstep;

break;

}else{

break;

}

}

}else{

if($realnum==$len)break;

}

}

unset($cur);

unset($alen);

unset($blen);

unset($realnum);

unset($ctype);

unset($cstep);

returnsubstr($title,$start,$length);

}

【PHP截取中文字符串的问题】相关文章:

PHP ASCII码与字符串的相互转换

PHP数据库操作面向对象的优点

PHP二进制与字符串之间的相互转换

PHP获取文件行数的方法

简单解决新浪SAE无法上传文件的问题

PHP中preg_match函数正则匹配的字符串长度问题

PHP+MYSQL中文乱码问题

PHP中预定义的6种接口介绍

关于PHP中操作MySQL数据库的一些要注意的问题

php比较相似字符串的方法

精品推荐
分类导航