手机
当前位置:查字典教程网 >编程开发 >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实现文件上传

PHP加密解密字符串汇总

支持中文的PHP按字符串长度分割成数组代码

在PHP的图形函数中显示汉字

PHP实现过滤掉非汉字字符只保留中文字符

PHP获取文件行数的方法

PHP5.2下preg_replace函数的问题

php支持中文字符串分割的函数

PHP+MYSQL中文乱码问题

PHP生成指定随机字符串的简单实现方法

精品推荐
分类导航