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 相关文章推荐
smarty+adodb+部分自定义类的php开发模式
Dec 31 PHP
php GeoIP的使用教程
Mar 09 PHP
PHP中绘制图像的一些函数总结
Nov 19 PHP
PHP中让curl支持sock5的代码实例
Jan 21 PHP
php图片添加水印例子
Jul 20 PHP
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
Aug 12 PHP
PHP目录操作实例总结
Sep 27 PHP
php版银联支付接口开发简明教程
Oct 14 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
Dec 28 PHP
PHP实现的多维数组排序算法分析
Feb 10 PHP
laravel 修改.htaccess文件 重定向public的解决方法
Oct 12 PHP
Laravel 类和接口注入相关的代码
Oct 15 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
网页游戏开发入门教程二(游戏模式+系统)
2009/11/02 PHP
关于php fread()使用技巧
2010/01/22 PHP
php修改数组键名的方法示例
2017/04/15 PHP
浅谈php使用curl模拟多线程发送请求
2019/03/08 PHP
jQuery 学习 几种常用方法
2009/06/11 Javascript
使用dynatrace-ajax跟踪JavaScript的性能
2010/04/12 Javascript
js对象的比较
2011/02/26 Javascript
浅谈Javascript事件处理程序的几种方式
2012/06/27 Javascript
判断文档离浏览器顶部的距离的方法
2014/01/08 Javascript
js实现的复制兼容chrome和IE
2014/04/03 Javascript
JavaScript的内存释放问题详解
2015/01/21 Javascript
原生js结合html5制作简易的双色子游戏
2015/03/30 Javascript
js实现将选中内容分享到新浪或腾讯微博
2015/12/16 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
2016/07/04 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
2017/03/09 Javascript
聊聊Vue.js的template编译的问题
2017/10/09 Javascript
nodejs项目windows下开机自启动的方法
2017/11/22 NodeJs
JS实现左边列表移到到右边列表功能
2018/03/28 Javascript
微信小程序引入Vant组件库过程解析
2019/08/06 Javascript
使用Python编写一个最基础的代码解释器的要点解析
2016/07/12 Python
python十进制和二进制的转换方法(含浮点数)
2018/07/07 Python
Django 数据库同步操作技巧详解
2019/07/19 Python
django 连接数据库 sqlite的例子
2019/08/14 Python
Python实现序列化及csv文件读取
2020/01/19 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
python中Array和DataFrame相互转换的实例讲解
2021/02/03 Python
HTML5 Canvas实现图片缩放、翻转、颜色渐变的代码示例
2016/02/28 HTML / CSS
春季运动会广播稿大全
2014/02/19 职场文书
空气环保标语
2014/06/12 职场文书
法学专业大学生实习自我鉴定
2014/10/05 职场文书
2015年女职工工作总结
2015/05/15 职场文书
毕业实习证明范本
2015/06/16 职场文书
2016春季田径运动会广播稿
2015/12/21 职场文书
小学教师教学反思
2016/02/24 职场文书
彻底理解golang中什么是nil
2021/04/29 Golang
oracle delete误删除表数据后如何恢复
2022/06/28 Oracle