php轻松实现中英文混排字符串截取


Posted in PHP onMay 28, 2014

先给大家介绍用到的函数:

mb_strwidth($str, $encoding) 返回字符串的宽度
$str 要计算的字符串
$encoding 要使用的编码,如 utf8、gbk
mb_strimwidth($str, $start, $width, $tail, $encoding) 按宽度截取字符串
$str 要截取的字符串
$start 从哪个位置开始截取,默认是0
$width 要截取的宽度
$tail 追加到截取字符串后边的字符串,常用的是 ...
$encoding 要使用的编码

 

下边给大家实例演示:

<?php
/**
 * utf8 编码格式
 * 1个中文占用3个字节
 * 我们希望的是1个中文占用2个字节,
 * 因为从宽度上看2个英文字母占用的位置相当于1个中文
 */
// 测试字符串
$str = 'aaaa啊啊aaaa啊啊啊aaa';
echo strlen($str); // 只用strlen输出为25个字节
// 必须指定编码,不然会使用php的内码 mb_internal_encoding()可以查看内码
// 使用mb_strwidth输出字符串的宽度为20使用utf8编码
echo mb_strwidth($str, 'utf8'); 
// 只有宽度大于10才截取
if(mb_strwidth($str, 'utf8')>10){
    // 此处设定从0开始截取,取10个追加...,使用utf8编码
    // 注意追加的...也会被计算到长度之内
    $str = mb_strimwidth($str, 0, 10, '...', 'utf8');
}
// 最后输出 aaaa啊... 4个a算4个 1个啊算2个 3个点算3个 4+2+3=9
// 是不是很简单啊,有的人说了为什么是9个不是10个吗?
// 因为正好“啊”的后边还是“啊”,中文算2个,9+2=11 超出了设定,所以去掉1个就是9了
echo $str;

下边再给大家介绍一些其它函数吧:

mb_strlen($str, $encoding) 返回字符串的长度
$str 要计算的字符串
$encoding 使用的编码
mb_substr($str, $start, $length, $encoding) 截取字符串
$str 要截取的字符串
$start 从哪里开始截取
$length 截取多长
$encoding 使用的编码

其实这2个函数和strlen()、substr()很像,唯一的不同就是可以设定编码。

下边上实例:

<?php
/**
 * utf8 编码格式
 * 1个中文占用3个字节
 */
$str = 'aa12啊aa';
echo strlen($str); // 直接输出长度为9
// 输出长度为7,为什么是7呢?
// 注意这里设定编码以后,不管是中文还是英文每个长度都为1
// a a 1 2 啊 a a 
// 1+1+1+1+1+1+1 = 7
// 是不是正好7个字符啊
echo mb_strlen($str, 'utf8');
// 同样mb_substr也是一样的
// 我现在只想要5个字符
echo mb_substr($str, 0, 5, 'utf8'); // 输出 aa12啊

其实mb扩展里边很有很多好用的函数,这里就不给大家一一列举。

有兴趣的朋友可以查看官方手册

好了,今天就先介绍到这里了。

PHP 相关文章推荐
php部分常见问题总结
Mar 27 PHP
php数组转换js数组操作及json_encode的用法详解
Oct 26 PHP
php输入流php://input使用浅析
Sep 02 PHP
php跨站攻击实例分析
Oct 28 PHP
php操作xml入门之xml基本介绍及xml标签元素
Jan 23 PHP
php简单实现MVC
Feb 05 PHP
ecshop后台编辑器替换成ueditor编辑器
Mar 03 PHP
PHP模板引擎Smarty内建函数foreach,foreachelse用法分析
Apr 11 PHP
关于PHP文件的自动运行方法分析
May 13 PHP
PHP将MySQL的查询结果转换为数组并用where拼接的示例
May 13 PHP
php实现的mongoDB单例模式操作类
Jan 20 PHP
PHP strripos函数用法总结
Feb 11 PHP
分享一段php获取linux服务器状态的代码
May 27 #PHP
教你如何快捷的使用cmd访问mysql小技巧
May 26 #PHP
将二维数组转为一维数组的2种方法
May 26 #PHP
windwos下使用php连接oracle数据库的过程分享
May 26 #PHP
查找php配置文件php.ini所在路径的二种方法
May 26 #PHP
php5.2以下版本无json_decode函数的解决方法
May 25 #PHP
模板引擎smarty工作原理以及使用示例
May 25 #PHP
You might like
php下防止单引号,双引号在接受页面转义的设置方法
2008/09/25 PHP
php 模拟POST|GET操作实现代码
2010/07/20 PHP
thinkphp框架实现数据添加和显示功能
2016/06/29 PHP
LAMP环境使用Composer安装Laravel的方法
2017/03/25 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
判断用户是否在线的代码
2011/03/05 Javascript
jQuery为iframe的body添加click事件的实现代码
2011/04/07 Javascript
javascript中call和apply的用法示例分析
2015/04/02 Javascript
跟我学习javascript的call(),apply(),bind()与回调
2015/11/16 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
2017/02/10 Javascript
微信公众号平台接口开发 菜单管理的实现
2019/08/14 Javascript
浅析Vue中拆分视图层代码的5点建议
2019/08/15 Javascript
Vue组件模板及组件互相引用代码实例
2020/03/11 Javascript
解决vue elementUI 使用el-select 时 change事件的触发问题
2020/11/17 Vue.js
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
Python中的sort()方法使用基础教程
2017/01/08 Python
使用 Python 实现简单的 switch/case 语句的方法
2018/09/17 Python
Python设计模式之装饰模式实例详解
2019/01/21 Python
24式加速你的Python(小结)
2019/06/13 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
2019/06/26 Python
基于python 等频分箱qcut问题的解决
2020/03/03 Python
django xadmin中form_layout添加字段显示方式
2020/03/30 Python
Keras 实现加载预训练模型并冻结网络的层
2020/06/15 Python
python爬虫快速响应服务器的做法
2020/11/24 Python
意大利宠物用品购物网站:Bauzaar
2018/09/15 全球购物
英国DVD和蓝光碟片购买网站:Zoom.co.uk(电影和电视)
2019/09/23 全球购物
sort命令的作用和用法
2013/08/25 面试题
护士实习自我鉴定
2013/10/22 职场文书
岗位说明书范文
2014/05/07 职场文书
科技节口号
2014/06/19 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/09/30 职场文书
2014-2015学年工作总结
2014/11/27 职场文书
工作检讨书范文
2015/01/23 职场文书
普通员工辞职信范文
2015/05/12 职场文书
于丹论语心得观后感
2015/06/15 职场文书
婚礼领导致辞大全
2015/07/28 职场文书