php自定义截取中文字符串-utf8版

UTF-8的编码范围(utf-8使用1-6个字节编码字符,实际上只使用了1-4字节):

1个字节:00——7F
2个字节:C080——DFBF
3个字符:E08080——EFBFBF
4个字符:F0808080——F7BFBFBF
$str = 'abcd我是中国人';

echo strlen($str), '<br/>';

echo mstrlen($str), '<br/>';

echo msubstr($str, 3, 9);

/**
* 统计utf8下字符串长度
*/
function mstrlen($str) {
$len = 0;
$i = 0;
$slen = strlen($str); while ($i < $slen) {
$o = ord($str[$i]);
if ($o < 127) {
$i++;
} elseif ($o < 224) {
$i+=2;
} else {
$i+=3;
}
$len++;
}
return $len;
}
/**
* 截取utf8编码下的字符串
*/
function msubstr($str, $start, $length) {
$len = mstrlen($str);
if($start < 0) {
$start += $len;
if($start < 0) {
$start = 0;
}
} $slen = strlen($str);
$index = 0;
for ($i = 0; $i<$start && $i<$slen; $i++) {
$o = ord($str[$index]);
if ($o < 127) {
$index++;
}elseif ($o < 224) {
$index+=2;
} else {
$index +=3;
}
} $length+=$index; $newStr = '';
for ($i = $index; $i < $length && $i<$slen; $i++) {
$o = ord($str[$i]);
if ($o < 127) {
$newStr .= $str[$i];
} elseif ($o < 224) {
$newStr .= substr($str, $i, 2);
$i+=1;
$length++;
} else {
$newStr .= substr($str, $i, 3);
$i+=2;
$length+=2;
}
} return $newStr;
}

  

模板哥 - 网页模板,网站模板,DIV模板,CSS模板,前端模板,官网,官网模板,企业网站模板下载,模板下载

php自定义截取中文字符串-utf8版的更多相关文章

  1. php截取中文字符串 GB2312 utf-8

    UTF-8截取中文字符串 function Cn_Substr($string, $length) { preg_match_all("/[\x01-\x7f]|[\xc2-\xdf][\x ...

  2. thinkphp模板中截取中文字符串的方法分享

    前段用thinkphp写了一个系统,感觉thinkphp学起来比较容易,开发起来了比较顺手,其中一个关键的因素就是它的模版引擎相当强大,使用方法跟smarty类似,在模版中还可以用php代码,有模版包 ...

  3. (实用篇)php中计算中文字符串长度、截取中文字符串的函数代码

    在PHP中,我们都知道有专门的mb_substr和mb_strlen函数,可以对中文进行截取和计算长度,但是,由于这些函数并非PHP的核心函数,所以,它们常常有可能没有开启.当然,如果是用的自己的服务 ...

  4. PHP截取中文字符串

    这里的输出的长度是6,那么一个汉字的字符长度就是3咯,可是老师演示的一个字符的长度却是2,百思不得其解. 查了一下资料发现,这个问题的答案与系统所采用的字符编码方式有关: 1. utf-8 如果系统采 ...

  5. php中计算中文字符串长度、截取中文字符串

    在做PHP开发的时候,由于我国的语言环境问题,所以我们常常需要对中文进行处理.在PHP中,我们都知道有专门的mb_substr和mb_strlen函数,可以对中文进行截取和计算长度,但是,由于这些函数 ...

  6. PHP截取中文字符串方法总结

    <?php @header('Content-type: text/html; charset=UTF-8'); $arr = "sa撒的发dfa多少sfd看sdf得12上24飞452 ...

  7. php截取中文字符串,英文字符串,中英文字符串长度的方法

    今天学习了php函数截取中文字符串,英文字符串,中英文字符串的函数使用方法.对中英文截取方法不理解,此处先做记录. PHP自带的函数如strlen().mb_strlen()都是通过计算字符串所占字节 ...

  8. thinkphp5 模板中截取中文字符串

    TP5模板页截取中文字符串 {$vo.task_detail|mb_substr=###,0,15,'utf-8'}

  9. php截取字符串|php截取字符串前几位|php截取中文字符串

    转 截取字符串专题:php截取字符串函数,php 字符串长度,php截取字符串前几位 PHP截取中文字符串(mb_substr)和获取中文 => http://www.q3060.com/lis ...

随机推荐

  1. Mac 10.14 安装抓包工具Fiddler

    环境安装 第一步: 首先,Mac下需要使用.Net编译后的程序,需要用到跨平台的方案Mono(现阶段微软已推出跨平台的方案.Net Core,不过暂时只支持控制台程序).安装程序可以从http://w ...

  2. JZ2440 u-boot-2016.11、linux-4.17和busybox-1.28.4移植笔记

    2018年5月份开始在JZ2440上陆续移植了u-boot-2016.11.u-boot-spl-2016.11.linux-4.17和busybox-1.28.4,其中linux-4.17和busy ...

  3. Vue躬行记(3)——样式和表单

    Vue对DOM元素的class和style两个特性做了专门的增强,即对CSS类和内联样式做了一层封装,通过v-bind指令来处理它们,而接收的表达式既可以是简单的字符串.对象或数组,也可以是复杂的计算 ...

  4. session与cookie,django中间件

    0819自我总结 一.session与cookie 1.django设置session request.session['name'] = username request.session['age' ...

  5. Java性能优化的小细节

    性能优化实现方式(单纯考虑代码层面): 1.减小代码体积 2.提高运行效率 如何做: 1.尽量指定类.方法的final修饰符 带有final修饰的类是不可派生的,该类所有的方法都是final的,jav ...

  6. JavaScript回调函数和递归函数

    一.回调函数--通过函数的指针来调用函数 把一个函数的指针作为另一个函数的参数,当调用这个参数的时候,这个函数就叫做回调函数 在链式运动上会用到回调函数,之后运动会见到 A.通过指针来调用函数 B.通 ...

  7. Linux Capabilities 入门教程:概念篇

    原文链接:Linux Capabilities 入门教程:概念篇 Linux 是一种安全的操作系统,它把所有的系统权限都赋予了一个单一的 root 用户,只给普通用户保留有限的权限.root 用户拥有 ...

  8. java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: NO)报错

    今天用spring整合mybatis的时候,报了这个错误.去网上查了一下,网上大多数都是用户权限问题,但是我用SQLyog视图使用root用户crud没有问题,排除了是权限的问题,后面发现是idea提 ...

  9. 再谈 APISIX 高性能实践

    2019 年 8 月 31 日,OpenResty 社区联合又拍云,举办 OpenResty × Open Talk 全国巡回沙龙·成都站,APISIX 主要作者王院生在活动上做了<APISIX ...

  10. Java线程池的正确关闭方法,awaitTermination还不够

    问题说明 今天发现了一个问题,颠覆了我之前对关闭线程池的认识. 一直以来,我坚信用shutdown + awaitTermination关闭线程池是最标准的方式. 不过,这次遇到的问题是,子线程用到B ...