php版本的英文计1,中文计2的截字方法,自动支持utf8与gbk
2013-04-09 21:12
806 查看
/*
* 字节截取,英文一个,中文等双字节按2算;
* 调用形态 byteSub ($str, 1, 8, '...');
* start与len都是按单字节算;
* start如果是处于半个中文,就取该整个中文;
* len如果处于半个中文,就不包含此中文;
* start从0开始,不是>=0,自动设置成0
* len 从0开始,如果不是>=0,自动设置成0
*/
function byteSub($str = '', $start = 0, $len = null, $more = '') {
if ( ($str == '') || is_null($str)) return '';
$code = 'UTF-8';
$str = mb_convert_encoding($str, $code, mb_detect_encoding($str, 'ASCII,EUC-CN,UTF-8'));
$start = (int)$start > 0 ? (int)$start : 0;
$len = (int)$len > 0 ? (int)$len : null;
$cl = $byteL = 0;
$sub = '';
$sLen = mb_strlen($str, $code);
for ($i = 0; $i < $sLen; $i++) {
$val = mb_substr($str, $i, 1, $code);
$cl = ord($val) >= 128 ? 2 : 1;
$byteL += $cl;
if ($start >= $byteL) {//还不到开始位
continue;
}
if (
is_null($len) //取完
|| (($len -= $cl) >= 0) //取本字时不超过
) {
$sub .= $val;
} else {//取超了
$more && ($sub .= $more);
break;
}
}
return $sub;
}
* 字节截取,英文一个,中文等双字节按2算;
* 调用形态 byteSub ($str, 1, 8, '...');
* start与len都是按单字节算;
* start如果是处于半个中文,就取该整个中文;
* len如果处于半个中文,就不包含此中文;
* start从0开始,不是>=0,自动设置成0
* len 从0开始,如果不是>=0,自动设置成0
*/
function byteSub($str = '', $start = 0, $len = null, $more = '') {
if ( ($str == '') || is_null($str)) return '';
$code = 'UTF-8';
$str = mb_convert_encoding($str, $code, mb_detect_encoding($str, 'ASCII,EUC-CN,UTF-8'));
$start = (int)$start > 0 ? (int)$start : 0;
$len = (int)$len > 0 ? (int)$len : null;
$cl = $byteL = 0;
$sub = '';
$sLen = mb_strlen($str, $code);
for ($i = 0; $i < $sLen; $i++) {
$val = mb_substr($str, $i, 1, $code);
$cl = ord($val) >= 128 ? 2 : 1;
$byteL += $cl;
if ($start >= $byteL) {//还不到开始位
continue;
}
if (
is_null($len) //取完
|| (($len -= $cl) >= 0) //取本字时不超过
) {
$sub .= $val;
} else {//取超了
$more && ($sub .= $more);
break;
}
}
return $sub;
}
相关文章推荐
- php5.4以下版本json不支持不转义内容中文的解决方法
- php截取中文字符串支持utf8和gbk
- php5.4以下版本json不支持不转义内容中文的解决方法
- phpexcel 读取中文gbk数据的csv在linux服务器下乱码的解决方法.
- php中json_encode处理gbk与gb2312中文乱码问题的解决方法
- Robbe-1.6.0 发布 - PHP开源中文分词扩展, GBK支持
- Windows 7下VS2008破解90天限制的激活升级方法(支持简体中文,英文,繁体中文)
- php5.3以后不支持类名做构造方法,命名空间 加自动引入无法触发类名构造方法
- php绘图之在图片上写中文和英文的方法
- utf8编码保存的js与php交互中文编码方法
- 分享一个PHP 字符串反转函数 支持中文 英文
- [备忘]英文操作系统下完美支持中文的方法
- MySQL字符集 GBK、GB2312、UTF8区别 解决PHP MYSQL中文乱码问题
- delphi for php 支持中文的方法
- PHP Manager 安装失败的解决方法, PHP Manager 1.4 for IIS 10,经验证支持windows server 2016版本
- delphi for php 支持中文的方法
- Windows 7下VS2008破解90天限制的激活升级方法(支持简体中文,英文,繁体中文)
- php检测字符串编码(utf-8,gbk,gb2312)是否为utf8编码的方法总结
- Windows 7下VS2008破解90天限制的激活升级方法(支持简体中文,英文,繁体中文)
- php json_encode不支持gbk gb2312编码的处理方法