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 相关文章推荐
解析htaccess伪静态的规则
Jun 18 PHP
解析smarty 截取字符串函数 truncate的用法介绍
Jun 20 PHP
Yii 快速,安全,专业的PHP框架
Sep 03 PHP
php中fgetcsv()函数用法实例
Nov 28 PHP
php异常处理方法实例汇总
Jun 24 PHP
我整理的PHP 7.0主要新特性
Jan 07 PHP
ThinkPHP模板循环输出Volist标签用法实例详解
Mar 23 PHP
用PHP写的一个冒泡排序法的函数简单实例
May 26 PHP
Yii框架防止sql注入,xss攻击与csrf攻击的方法
Oct 18 PHP
thinkPHP5.0框架独立配置与动态配置方法
Mar 17 PHP
YII分模块加载路由的实现方法
Oct 01 PHP
laravel 查询数据库获取结果实现判断是否为空
Oct 24 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绘图技术
2013/07/03 PHP
div li的多行多列 无刷新分页示例代码
2013/10/16 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
2014/11/18 PHP
PHP实现事件机制实例分析
2015/06/26 PHP
JQuery的ajax基础上的超强GridView展示
2009/09/18 Javascript
使用SyntaxHighlighter实现HTML高亮显示代码的方法
2010/02/04 Javascript
JS 如果改变span标签的是否隐藏属性
2011/10/06 Javascript
jquery css 设置table的奇偶行背景色示例
2014/06/03 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
2016/09/04 Javascript
基于vue2.0+vuex+localStorage开发的本地记事本示例
2017/02/28 Javascript
微信小程序 跳转方式总结
2017/04/20 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
2017/06/16 Javascript
Web制作验证码功能实例代码
2017/06/19 Javascript
javascript的this关键字详解
2019/05/20 Javascript
[51:29]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第一场 11.05
2020/11/05 DOTA
Django如何实现内容缓存示例详解
2017/09/24 Python
Scrapy使用的基本流程与实例讲解
2018/10/21 Python
python自动发微信监控报警
2019/09/06 Python
python实现广度优先搜索过程解析
2019/10/19 Python
wxPython实现画图板
2020/08/27 Python
Python 中@property的用法详解
2020/01/15 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
浅谈pycharm导入pandas包遇到的问题及解决
2020/06/01 Python
阿迪达斯加拿大官网:Adidas加拿大
2016/08/25 全球购物
Ellos瑞典官网:北欧地区时尚、美容和住宅领域领先的电子商务网站
2019/11/21 全球购物
Java如何调用外部Exe程序
2015/07/04 面试题
工商学院毕业生自荐信
2013/11/12 职场文书
高级电工工作职责
2013/11/21 职场文书
优秀研究生自我鉴定
2013/12/04 职场文书
七一建党节演讲稿
2014/09/11 职场文书
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
卫生院艾滋病宣传活动总结
2015/05/09 职场文书
详解MySQL的半同步
2021/04/22 MySQL
vue使用element-ui按需引入
2022/05/20 Vue.js
Redis特殊数据类型Geospatial地理空间
2022/06/01 Redis