PHP中可以避免乱码的截取汉字

来源:互联网 发布:药品网络推广 编辑:程序博客网 时间:2024/05/20 19:32

 

对字符的接取可以用substr()  之后看了一下文章可以用mb的扩展库mb_substr() 但如果中E数字混排的时候

可能会出现乱码 网上google 下 找到这个 收藏了

<?
/*
   * 可以避免乱码的截取汉字
   * 参数 $str 为字符串,$start 为开始字符,$len 结束字符
   * 返回截取后的字符
   
*/
function msubstr($str, $start, $len) {
   
$tmpstr = "";
   
$strlen = $start + $len;
   
for($i = 0$i < $strlen$i++) {
    
if(ord(substr($str, $i, 1)) > 0xa0) {
     
$tmpstr .= substr($str, $i, 2);
     
$i++;
    } 
else
     
$tmpstr .= substr($str, $i, 1);
   }
   
return $tmpstr;
}
?>



<?php
/*
#$start为起始位置,默认为0
#$len为截取长度,如遇半个汉字,则自动降低长度而不是取整个汉字,保证了不会超过规定的长度
*/
function substr_cn($str,$len,$start=0)
{
$strlen=strlen($str);
for($i=0;$i<$strlen;$i++)
{
   
if($i>=$start&&$i<($start+$len))
   {
    
if(ord(substr($str,$i,1))>0xa1)
    {
     
$tmpstr.=substr($str,$i,2);
     
$i++;
    }
    
else
     
$tmpstr.=substr($str,$i,1);
   }

}
if(strlen($tmpstr)>$len)
{
   
$len--;
   
return substr_cn($str,$len,$start);
}
return $tmpstr;
}

//-------------------------------------------------
//示例

echo substr_cn("123as中国PHP联盟",9,1);
echo "<br>";
echo substr_cn("123as中国PHP联盟",10);

?>
 
原创粉丝点击