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

本文介绍了一种在处理包含中英文混合文本时,能够有效避免乱码问题的字符串截取方法。该方法通过自定义函数实现,能够在指定长度内准确截取字符串,特别适用于需要处理多语言内容的应用场景。

 

对字符的接取可以用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);

?>
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值