php截取中英文混合字符串,PHP截取中英文混合字符

// PHP截取中英文及标点符号混合的字符串函数(绝对不会出现乱码)

// 本程序在utf-8、gb2312中测试通过。使用者自行测试big5。

// 函数 left( 源字符串, 截取指定的字符串个数, 编码(可省略,默认为utf-8) )

function left($str, $len, $charset="utf-8")

{

//如果截取长度小于等于0,则返回空

if( !is_numeric($len) or $len <= 0 )

{

return "";

}

//如果截取长度大于总字符串长度,则直接返回当前字符串

$sLen = strlen($str);

if( $len >= $sLen )

{

return $str;

}

//判断使用什么编码,默认为utf-8

if ( strtolower($charset) == "utf-8" )

{

$len_step = 3; //如果是utf-8编码,则中文字符长度为3

}else{

$len_step = 2; //如果是gb2312或big5编码,则中文字符长度为2

}

//执行截取操作

$len_i = 0;

//初始化计数当前已截取的字符串个数,此值为字符串的个数值(非字节数)

$substr_len = 0; //初始化应该要截取的总字节数

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

{

if ( $len_i >= $len ) break; //总截取$len个字符串后,停止循环

//判断,如果是中文字符串,则当前总字节数加上相应编码的中文字符长度

if( ord(substr($str,$i,1)) > 0xa0 )

{

$i += $len_step - 1;

$substr_len += $len_step;

}else{ //否则,为英文字符,加1个字节

$substr_len ++;

}

$len_i ++;

}

$result_str = substr($str,0,$substr_len );

return $result_str;

}

// 调用示例

$str = "空格 也算一个字符";

echo "截取后的字符串:".left($str,14);

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值