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 相关文章推荐
基于curl数据采集之正则处理函数get_matches的使用
Apr 28 PHP
php实例分享之html转为rtf格式
Jun 02 PHP
php 判断网页是否是utf8编码的方法
Jun 06 PHP
php插入排序法实现数组排序实例
Feb 16 PHP
Laravel 5 学习笔记
Mar 06 PHP
php结合curl实现多线程抓取
Jul 09 PHP
php实现倒计时效果
Dec 19 PHP
Symfony2框架学习笔记之HTTP Cache用法详解
Mar 18 PHP
php 访问oracle 存储过程实例详解
Jan 08 PHP
PHP中单例模式与工厂模式详解
Feb 17 PHP
php微信公众号开发之简答题
Oct 20 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
Oct 28 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
收音机发烧友应当熟知的100条知识
2021/03/02 无线电
虹吸壶是谁发明的?煮出来的咖啡好喝吗
2021/03/04 冲泡冲煮
自动跳转中英文页面
2006/10/09 PHP
php中使用Akismet防止垃圾评论的代码
2011/06/10 PHP
关于shopex同步ucenter的redirect问题,导致script不运行
2013/04/10 PHP
3个PHP多维数组转为一维数组的方法实例
2014/03/13 PHP
让codeigniter与swfupload整合的最佳解决方案
2014/06/12 PHP
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
Yii框架使用魔术方法实现跨文件调用功能示例
2017/05/20 PHP
聊聊 PHP 8 新特性 Attributes
2020/08/19 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
在js中单选框和复选框获取值的方式
2009/11/06 Javascript
javascript使用eval或者new Function进行语法检查
2010/10/16 Javascript
用innerhtml提高页面打开速度的方法
2013/08/02 Javascript
JS控制阿拉伯数字转为中文大写示例代码
2013/09/04 Javascript
jQuery获得内容和属性示例代码
2014/01/16 Javascript
js实现九宫格图片半透明渐显特效的方法
2015/02/16 Javascript
以JavaScript来实现WordPress中的二级导航菜单的方法
2015/12/14 Javascript
Bootstrap嵌入jqGrid,使你的table牛逼起来
2016/05/05 Javascript
Vue form 表单提交+ajax异步请求+分页效果
2017/04/22 Javascript
jquery实现图片轮播器
2017/05/23 jQuery
浅谈Vue.js 1.x 和 2.x 实例的生命周期
2017/07/25 Javascript
[00:37]DOTA2上海特级锦标赛 OG战队宣传片
2016/03/03 DOTA
python在linux中输出带颜色的文字的方法
2014/06/19 Python
使用pandas实现csv/excel sheet互相转换的方法
2018/12/10 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
2019/12/22 Python
关于windows下Tensorflow和pytorch安装教程
2020/02/04 Python
Python依赖包迁移到断网环境操作
2020/07/13 Python
canvas小画板之平滑曲线的实现
2020/08/12 HTML / CSS
手工制作的意大利太阳镜和光学元件:Illesteva
2019/01/19 全球购物
物业管理求职自荐信
2013/09/25 职场文书
人力资源主管岗位职责
2014/01/29 职场文书
电子商务专业应届毕业生求职信
2014/06/21 职场文书
党员创先争优心得体会
2014/09/11 职场文书
车辆挂靠协议书
2016/03/23 职场文书
简历自我评价:教师师德表现自我评价
2019/04/24 职场文书