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 相关文章推荐
杏林同学录(三)
Oct 09 PHP
一个PHP并发访问实例代码
Sep 06 PHP
php 如何获取数组第一个值
Aug 06 PHP
php数组删除元素示例
Mar 21 PHP
WordPress自定义时间显示格式
Mar 27 PHP
php随机显示指定文件夹下图片的方法
Jul 13 PHP
PHP实现简单爬虫的方法
Jul 29 PHP
thinkphp 字母函数详解T/I/N/D/M/A/R/U
Apr 03 PHP
PHP编程求最大公约数与最小公倍数的方法示例
May 29 PHP
PHP实现一个轻量级容器的方法
Jan 28 PHP
Laravel 前端资源配置教程
Oct 18 PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
Mar 23 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
评分9.0以上的动画电影,剧情除了经典还很燃
2020/03/04 日漫
重新封装zend_soap实现http连接安全认证的php代码
2011/01/12 PHP
PHP四舍五入、取整、round函数使用示例
2015/02/06 PHP
PHP简单实现遍历目录下特定文件的方法小结
2017/05/22 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
PHP抽象类与接口的区别实例详解
2019/05/09 PHP
TextArea设置MaxLength属性最大输入值的js代码
2012/12/21 Javascript
javascript实现的DES加密示例
2013/10/30 Javascript
js 中获取制定的cook信息实现方法
2016/11/19 Javascript
详解jQuery选择器
2016/12/21 Javascript
微信小程序 常用工具类详解及实例
2017/02/15 Javascript
解析NodeJS异步I/O的实现
2017/04/13 NodeJs
node.js + socket.io 实现点对点随机匹配聊天
2017/06/30 Javascript
如何重置vue打印变量的显示方式
2017/12/06 Javascript
使用Object.defineProperty如何巧妙找到修改某个变量的准确代码位置
2018/11/02 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
使用VueCli3+TypeScript+Vuex一步步构建todoList的方法
2019/07/25 Javascript
用云开发Cloudbase实现小程序多图片内容安全监测的代码详解
2020/06/07 Javascript
JavaScript实现网页tab栏效果制作
2020/11/20 Javascript
Python程序设计入门(1)基本语法简介
2014/06/13 Python
Python编程之属性和方法实例详解
2015/05/19 Python
Python中列表list以及list与数组array的相互转换实现方法
2017/09/22 Python
详解python中的Turtle函数库
2018/11/19 Python
基于HTML5超酷摄像头(HTML5 webcam)拍照功能实现代码
2012/12/13 HTML / CSS
香港万宁官方海外旗舰店:香港健与美连锁店
2018/09/27 全球购物
戴森西班牙官网:Dyson西班牙
2020/02/04 全球购物
Booking.com缤客中国:全球酒店在线预订网站
2020/05/03 全球购物
优秀小学生家长评语
2014/01/30 职场文书
股东授权委托书范文
2014/09/13 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
行政助理岗位职责范本
2015/04/11 职场文书
生日赠语
2015/06/23 职场文书
公司人力资源管理制度
2015/08/05 职场文书
关于做家务的心得体会
2016/01/23 职场文书
高中诗歌鉴赏教学反思
2016/02/16 职场文书
Python制作动态字符画的源码
2021/08/04 Python