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+oracle 分页类
Oct 09 PHP
PHP 获取客户端真实IP地址多种方法小结
May 15 PHP
PHP版国家代码、缩写查询函数代码
Aug 14 PHP
php和jquery实现地图区域数据统计展示数据示例
Feb 12 PHP
smarty简单分页的实现方法
Oct 27 PHP
CI框架中通过hook的方式实现简单的权限控制
Jan 07 PHP
php实现scws中文分词搜索的方法
Dec 25 PHP
使用YII2框架实现微信公众号中表单提交功能
Sep 04 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
PHP高效获取远程图片尺寸和大小的实现方法
Oct 20 PHP
laravel利用中间件做防非法登录和权限控制示例
Oct 21 PHP
php 使用html5 XHR2实现上传文件与进度显示功能示例
Mar 03 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使用trim函数去除字符串左右空格及特殊字符实例
2016/01/07 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
2017/08/11 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
PHP时间戳和日期相互转换操作实例小结
2018/12/18 PHP
心扬JS分页函数代码
2010/09/10 Javascript
关于firefox的ElementTraversal 接口 使用说明
2010/11/11 Javascript
JS焦点图切换,上下翻转
2011/05/12 Javascript
利用jquery的获取JS文件中的字符串内容
2012/02/14 Javascript
js 删除数组的几种方法小结
2014/02/21 Javascript
javascript原生ajax写法分享
2016/04/10 Javascript
基于JQuery实现图片上传预览与删除操作
2016/05/24 Javascript
jquery validate表单验证插件
2016/09/06 Javascript
微信小程序页面间通信的5种方式
2017/03/31 Javascript
详解vue-cli中配置sass
2017/06/21 Javascript
node.js 发布订阅模式的实例
2017/09/10 Javascript
详解node+express+ejs+bootstrap构建项目
2017/09/27 Javascript
nodejs 使用http进行post或get请求的实例(携带cookie)
2019/01/03 NodeJs
简单了解Ajax表单序列化的实现方法
2019/06/14 Javascript
微信小程序点餐系统开发常见问题汇总
2019/08/06 Javascript
django基础之数据库操作方法(详解)
2017/05/24 Python
Python之自动获取公网IP的实例讲解
2017/10/01 Python
Python从零开始创建区块链
2018/03/06 Python
Python爬取成语接龙类网站
2018/10/19 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
2020/10/15 Python
selenium+headless chrome爬虫的实现示例
2021/01/08 Python
HTML5新特性之type=file文件上传功能
2018/02/02 HTML / CSS
麦德龙官方海外旗舰店:德国麦德龙超市
2017/12/23 全球购物
世界上最受欢迎的钓鱼诱饵:Rapala
2019/05/02 全球购物
最新的小工具和卓越的产品设计:Oh That Tech!
2019/08/07 全球购物
中学生校园广播稿
2014/01/16 职场文书
中国文明网签名寄语
2014/01/18 职场文书
保险内勤岗位职责
2015/04/13 职场文书
管理失职检讨书
2015/05/05 职场文书
python状态机transitions库详解
2021/06/02 Python
面试被问select......for update会锁表还是锁行
2021/11/11 MySQL