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中截取字符串支持utf-8
Jan 18 PHP
Apache2中实现多网站域名绑定的实现方法
Jun 01 PHP
PHP中SESSION使用中的一点经验总结
Mar 30 PHP
使用php发送有附件的电子邮件-(PHPMailer使用的实例分析)
Apr 26 PHP
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
Jun 12 PHP
Windows7下的php环境配置教程
Feb 28 PHP
WordPress中用于检索模版的相关PHP函数使用解析
Dec 15 PHP
php通过两层过滤获取留言内容的方法
Jul 11 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
Aug 17 PHP
laravel实现简单用户权限的示例代码
May 28 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
Apr 05 PHP
浅谈php常用的7大框架的优缺点
Jul 20 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 获取目录下的图片并随机显示的代码
2009/12/28 PHP
PHP简单实现数字分页功能示例
2016/08/24 PHP
在Laravel的Model层做数据缓存的实现
2019/09/26 PHP
laravel邮件发送的实现代码示例
2020/01/31 PHP
实例讲解JQuery中this和$(this)区别
2014/12/08 Javascript
jQuery创建DOM元素实例解析
2015/01/19 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
jQuery formValidator表单验证
2016/01/07 Javascript
jQuery.Callbacks()回调函数队列用法详解
2016/06/14 Javascript
js完整倒计时代码分享
2016/09/18 Javascript
Javascript计算二维数组重复值示例代码
2016/12/18 Javascript
微信小程序开发(二)图片上传+服务端接收详解
2017/01/11 Javascript
jQuery异步提交表单实例
2017/05/30 jQuery
vue 表单输入格式化中文输入法异常问题
2018/05/30 Javascript
Vue中inheritAttrs的使用实例详解
2020/12/31 Vue.js
[47:45]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第一场 2月26日
2021/03/11 DOTA
python Django模板的使用方法(图文)
2013/11/04 Python
使用Python的Tornado框架实现一个简单的WebQQ机器人
2015/04/24 Python
在python3环境下的Django中使用MySQL数据库的实例
2017/08/29 Python
python实现字符串和字典的转换
2018/09/29 Python
Django框架视图介绍与使用详解
2019/07/18 Python
python和php哪个容易学
2020/06/19 Python
斯凯奇新西兰官网:SKECHERS新西兰
2018/02/22 全球购物
音乐学个人的自荐书范文
2013/11/26 职场文书
致跳远、跳高运动员广播稿
2014/01/09 职场文书
两只小狮子教学反思
2014/02/05 职场文书
解除劳动关系协议书范文
2014/09/11 职场文书
车辆年审委托书范本
2014/09/18 职场文书
2014年安全管理工作总结
2014/12/01 职场文书
2014年减负工作总结
2014/12/10 职场文书
2015年社会治安综合治理工作总结
2015/04/10 职场文书
SQL SERVER中常用日期函数的具体使用
2021/04/08 SQL Server
用Python写一个简易版弹球游戏
2021/04/13 Python
为什么在foreach循环中JAVA集合不能添加或删除元素
2021/06/11 Java/Android
关于Vue中的options选项
2022/03/22 Vue.js
Pygame游戏开发之太空射击实战敌人精灵篇
2022/08/05 Python