时间:2016-02-24 20:19 来源: 我爱IT技术网 作者:佚名
欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【实用技巧:PHP截取中文字符串的问题】,下面是详细的分享!
实用技巧:PHP截取中文字符串的问题
以下代码试用于GB2312编码,截取中文字符串是PHP中一个头疼的问题,解决方法是根据值是否大于等于128来判断是否是双字节字符,以避免出现乱码的情况。但中英文混合、特殊符号等问题总是存在,现在写一个比较全面的,仅供参考:
程序说明:
1. len 参数以中文字符为标准,1len等于2个英文字符,为了形式上好看些
2. 如果将magic参数设为false,则中文和英文同等看待,取绝对的字符数
3. 特别适用于用htmlspecialchars()进行过编码的字符串
4. 能正确处理GB2312中实体字符模式()
程序代码:
| 以下为引用的内容: function FSubstr($title,$start,$len="",$magic=true) { $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) return substr($title,$start,$len); $alen =0; $blen=0; $realnum=0; for($i=$start;$i=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); return substr($title,$start,$length); } |
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
