php 中英文截取 php,PHP 中英文截取无乱码

本文介绍了如何在PHP中处理UTF-8字符串时避免乱码问题,核心在于根据字符的字节数进行截取。提供了一个名为`utf8sub`的函数,通过判断不同字节数的UTF-8字符来正确截取字符串,确保了中文和英文混合的内容截取无误。
摘要由CSDN通过智能技术生成

在学习MySql 字符集时,解决了PHP中英文截取无乱码的问题。这个方法的核心在于判断取多少个字节上。

//PHP中英文截取无乱码

header('Content_type=text/php;charset=UTF-8');

$str = '浙江zju大学';

//关键在于判断往后截多少个字节上,这是这个函数的核心

//此函数是用客串来判断的,效率不高

//位运算效果会更好

//110x xxxx && 1110 0000 -> 1100 0000

//1110 xxxx && 1111 0000 -> 1110 0000

//位运算时不受英文字符最高位为0的影响,只是在转成字符串才受到影响

function utf8sub($str,$len){

if($len<0){

return '';

}

$res = '';

$offset = 0;

$chars = 0;

$count = 0;

$length = strlen($str);//待截取字符串的字节数

while($chars

$high = decbin(ord(substr($str,$offset,1)));//先截取客串的一个字节,substr按字节进行截取

//重要突破,已经能够判断高位字节

if(strlen($high)<8){//英文字符ascii编码长度为7,通过长度小于8来判断

$count = 1;

// echo 'hello,I am in','
';

}elseif (substr($high,0,3) == '110') {

$count = 2;//取两个字节的长度

}elseif (substr($high,0,4) == '1110') {

$count = 3;//取三个字节的长度

}elseif (substr($high,0,5) == '11110') {

$count = 4;

}elseif (substr($high,0,6) == '111110') {

$count = 5;

}elseif(substr($high,0,7)=='1111110'){

$count = 6;

}

$res .= substr($str,$offset,$count);

$chars +=1;

$offset += $count;

}

return $res;

}

echo utf8sub($str,5),'
';

echo utf8sub($str,10),'
';

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值