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 相关文章推荐
5.PHP的其他功能
Oct 09 PHP
PHP中几种常见的超时处理全面总结
Sep 11 PHP
php代码中使用换行及(\n或\r\n和br)的应用
Feb 02 PHP
php 无法加载mcrypt.dll的解决办法
Apr 03 PHP
深入php处理整数函数的详解
Jun 09 PHP
一个好用的PHP验证码类实例分享
Dec 27 PHP
php画图实例
Nov 05 PHP
PHP 反射(Reflection)使用实例
May 12 PHP
PHP处理postfix邮件内容的方法
Jun 16 PHP
yii2 commands模式以及配置crontab定时任务的方法
Aug 19 PHP
PHP addAttribute()函数讲解
Feb 03 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
Oct 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 curl选项列表(超详细)
2013/07/01 PHP
ThinkPHP实现将本地文件打包成zip下载
2014/06/26 PHP
PHP CURL 多线程操作代码实例
2015/05/13 PHP
Yii rules常用规则示例
2016/03/15 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
2019/04/15 PHP
js AppendChild与insertBefore用法详细对比
2013/12/16 Javascript
jquery 实现两级导航菜单附效果图
2014/03/07 Javascript
JQuery中extend使用介绍
2014/03/13 Javascript
JavaScript中Function详解
2015/02/27 Javascript
jquery ajax双击div可直接修改div中的内容
2016/03/04 Javascript
深入理解jQuery事件绑定
2016/06/02 Javascript
Node.js开启Https的实践详解
2016/10/25 Javascript
功能强大的jquery.validate表单验证插件
2016/11/07 Javascript
jQuery中的deferred对象和extend方法详解
2017/05/08 jQuery
JavaScript运动框架 多值运动(四)
2017/05/18 Javascript
三分钟学会用ES7中的Async/Await进行异步编程
2018/06/14 Javascript
解决JavaScript中0.1+0.2不等于0.3问题
2018/10/23 Javascript
Vue请求JSON Server服务器数据的实现方法
2018/11/02 Javascript
移动端手指操控左右滑动的菜单
2019/09/08 Javascript
javaScript把其它类型转换为Number类型
2019/10/13 Javascript
解决vue-cli输入命令vue ui没效果的问题
2020/11/17 Javascript
python网络编程示例(客户端与服务端)
2014/04/24 Python
pandas DataFrame 交集并集补集的实现
2019/06/24 Python
详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
2019/07/06 Python
django中账号密码验证登陆功能的实现方法
2019/07/15 Python
django中使用POST方法获取POST数据
2019/08/20 Python
python yield关键词案例测试
2019/10/15 Python
Python编写一个验证码图片数据标注GUI程序附源码
2019/12/09 Python
python同义词替换的实现(jieba分词)
2020/01/21 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
2020/12/11 Python
CSS3教程(3):border-color网页边框色彩
2009/04/02 HTML / CSS
Herschel美国官网:背包、手提袋及配件
2020/03/10 全球购物
小学雷锋月活动总结
2014/07/03 职场文书
2015年大学班长个人工作总结
2015/04/24 职场文书
导游词之襄阳古城
2019/09/27 职场文书
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js