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生成WAP页面
Oct 09 PHP
PHP面向对象——访问修饰符介绍
Nov 08 PHP
php计算当前程序执行时间示例
Apr 24 PHP
Windows下的PHP 5.3.x安装 Zend Guard Loader教程
Sep 06 PHP
php实现字符串首字母转换成大写的方法
Mar 17 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
Jul 01 PHP
PHP实现的简单缓存类
Jul 29 PHP
PHP简单实现无限级分类的方法
May 13 PHP
PHP基于GD库实现的生成图片缩略图函数示例
Jul 05 PHP
PHP使用文件锁解决高并发问题示例
Mar 29 PHP
PHP函数按引用传递参数及函数可选参数用法示例
Jun 04 PHP
PHP扩展类型及安装方式解析
Apr 27 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中将html中的br换行符转换为文本输入中的换行符
2013/03/26 PHP
PHP实现的连贯操作、链式操作实例
2014/07/08 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
2016/01/08 PHP
PHP实现转盘抽奖算法分享
2020/04/15 PHP
jquery $.ajax入门应用一
2008/11/19 Javascript
js每隔5分钟执行一次ajax请求的实现方法
2013/11/27 Javascript
javascript对下拉列表框(select)的操作实例讲解
2013/11/29 Javascript
JQuery1.8 判断元素是否绑定事件的方法
2014/07/10 Javascript
基于 Docker 开发 NodeJS 应用
2014/07/30 NodeJs
javascript中Date对象的getDay方法使用指南
2014/12/22 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
JS与jQ读取xml文件的方法
2015/12/08 Javascript
jQuery使用ajax方法解析返回的json数据功能示例
2017/01/10 Javascript
Vuex之理解Getters的用法实例
2017/04/19 Javascript
Vue.js 2.0 移动端拍照压缩图片预览及上传实例
2017/04/27 Javascript
深入理解ES6的迭代器与生成器
2017/08/19 Javascript
js获取文件里面的所有文件名(实例)
2017/10/17 Javascript
详解vue-cli下ESlint 配置说明
2018/09/03 Javascript
微信小程序实现折线图的示例代码
2019/06/07 Javascript
vue项目中全局引入1个.scss文件的问题解决
2019/08/01 Javascript
微信小程序实现日历签到
2020/09/21 Javascript
django 创建过滤器的实例详解
2017/08/14 Python
python实现八大排序算法(2)
2017/09/14 Python
Python机器学习库scikit-learn安装与基本使用教程
2018/06/25 Python
python实现机器人卡牌
2019/10/06 Python
Python三元运算与lambda表达式实例解析
2019/11/30 Python
学python爬虫能做什么
2020/07/29 Python
Python安装第三方库攻略(pip和Anaconda)
2020/10/15 Python
8款使用 CSS3 实现超炫的 Loading(加载)的动画效果
2015/03/17 HTML / CSS
美国波道夫·古德曼百货官网:Bergdorf Goodman
2017/11/07 全球购物
《孔子游春》教学反思
2014/02/25 职场文书
电脑售后服务承诺书
2014/03/27 职场文书
国庆节标语大全
2014/10/08 职场文书
导游词之大雁塔景区
2019/09/17 职场文书
PostgreSQL 插入INSERT、删除DELETE、更新UPDATE、事务transaction
2022/04/12 PostgreSQL
使用Python开发冰球小游戏
2022/04/30 Python