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中文URL编解码(urlencode()rawurlencode()
Jul 03 PHP
使用NetBeans + Xdebug调试PHP程序的方法
Apr 12 PHP
php正则表达匹配中文问题分析小结
Mar 25 PHP
PHP数据类型之整数类型、浮点数的介绍
Apr 28 PHP
如何修改和添加Apache的默认站点目录
Jul 05 PHP
php开启openssl的方法
May 15 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
Jun 25 PHP
PHP中上传多个文件的表单设计例子
Nov 19 PHP
php 使用array函数实现分页
Feb 13 PHP
typecho插件编写教程(四):插件挂载
May 28 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
Jun 07 PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
Apr 22 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下用GD生成生成缩略图的两个选择和区别
2007/04/17 PHP
探讨PHP JSON中文乱码的解决方法详解
2013/06/06 PHP
php常用字符串比较函数实例汇总
2014/11/24 PHP
php获取当前url地址的方法小结
2017/01/10 PHP
3Z版基于jquery的图片复选框(asp.net+jquery)
2010/04/12 Javascript
基于jquery的使ListNav兼容中文首字拼音排序的实现代码
2011/07/10 Javascript
jQuery.extend()的实现方式详解及实例
2013/06/29 Javascript
javascipt匹配单行和多行注释的正则表达式
2013/11/20 Javascript
jquery解析JSON数据示例代码
2014/03/17 Javascript
JS+CSS实现带小三角指引的滑动门效果
2015/09/22 Javascript
AngularJS 霸道的过滤器小结
2017/04/26 Javascript
Nodejs实现文件上传的示例代码
2017/09/26 NodeJs
vue.js系列中的vue-fontawesome使用
2018/02/10 Javascript
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
2019/08/17 Javascript
JS XMLHttpRequest原理与使用方法深入详解
2020/04/30 Javascript
jquery实现简单每周轮换的日历
2020/09/10 jQuery
基于js实现的图片拖拽排序源码实例
2020/11/04 Javascript
Python PyQt5标准对话框用法示例
2017/08/23 Python
Python实现简易Web爬虫详解
2018/01/03 Python
python selenium UI自动化解决验证码的4种方法
2018/01/05 Python
Django中redis的使用方法(包括安装、配置、启动)
2018/02/21 Python
浅析Python四种数据类型
2018/09/26 Python
Python3匿名函数lambda介绍与使用示例
2019/05/18 Python
Python 实现遥感影像波段组合的示例代码
2019/08/04 Python
关于PyTorch 自动求导机制详解
2019/08/18 Python
使用pyhon绘图比较两个手机屏幕大小(实例代码)
2020/01/03 Python
Pycharm常用快捷键总结及配置方法
2020/11/14 Python
澳大利亚第一旅行车和房车配件店:Caravan RV Camping
2020/12/26 全球购物
计算机工程学院个人求职信
2013/10/05 职场文书
小学生环保倡议书
2014/05/15 职场文书
党员心得体会范文2016
2016/01/23 职场文书
2019通用版导游词范本!
2019/08/07 职场文书
Django项目如何正确配置日志(logging)
2021/04/29 Python
使用Redis实现秒杀功能的简单方法
2021/05/08 Redis
深入理解CSS 中 transform matrix矩阵变换问题
2021/08/30 HTML / CSS
pd.DataFrame中的几种索引变换的实现
2022/06/16 Python