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中的fopen()函数用打开文件模式说明
Jun 20 PHP
解析PHP中常见的mongodb查询操作
Jun 20 PHP
一个严格的PHP Session会话超时时间设置方法
Jun 10 PHP
浅谈ThinkPHP的URL重写
Nov 25 PHP
PHP调试函数和日志记录函数分享
Jan 31 PHP
分享一则PHP定义函数代码
Feb 26 PHP
php使用Image Magick将PDF文件转换为JPG文件的方法
Apr 01 PHP
php恢复数组的key为数字序列的方法
Apr 28 PHP
PHP实现删除字符串中任何字符的函数
Aug 11 PHP
php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
Aug 27 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
Dec 18 PHP
PHP封装cURL工具类与应用示例
Jul 01 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循环输出数据库内容的代码
2008/05/24 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
php实现登陆模块功能示例
2016/10/20 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
2019/07/03 PHP
jQuery插件EnPlaceholder实现输入框提示文字
2015/06/05 Javascript
分享一个原生的JavaScript拖动方法
2016/09/25 Javascript
Javascript数组循环遍历之forEach详解
2016/11/07 Javascript
angular十大常见问题
2017/03/07 Javascript
jQuery实现frame之间互通的方法
2017/06/26 jQuery
seajs中最常用的7个功能、配置示例
2017/10/10 Javascript
VUE2实现事件驱动弹窗示例
2017/10/21 Javascript
Vuex 快速入门(简单易懂)
2018/09/20 Javascript
如何基于vue-cli3.0构建功能完善的移动端架子
2019/04/24 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
2019/05/30 Javascript
vue 接口请求地址前缀本地开发和线上开发设置方式
2020/08/13 Javascript
JavaScript快速调试的两个技巧
2020/11/04 Javascript
Python建立Map写Excel表实例解析
2018/01/17 Python
python实现小球弹跳效果
2019/05/10 Python
python如何爬取网站数据并进行数据可视化
2019/07/08 Python
Python openpyxl读取单元格字体颜色过程解析
2019/09/03 Python
python使用opencv实现马赛克效果示例
2019/09/28 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
Puritan’s Pride(普丽普莱)官方网站:美国最大最全的保健品公司之一
2016/10/23 全球购物
澳大利亚在线百货商店:Real Smart
2017/08/13 全球购物
Agoda台湾官网:国内外订房2折起
2018/03/20 全球购物
下述程序的作用是计算机数组中的最大元素值及其下标
2012/11/26 面试题
大学生的网络创业计划书
2013/12/26 职场文书
优良学风班总结材料
2014/02/08 职场文书
超市仓管员岗位职责
2014/04/07 职场文书
毕业寄语大全
2014/04/09 职场文书
文明生主要事迹
2014/05/25 职场文书
作文评语怎么写
2014/12/25 职场文书
乡镇保密工作承诺书
2015/05/04 职场文书
学校通报表扬范文
2015/05/04 职场文书
房产电话营销开场白
2015/05/29 职场文书
小学五年级班主任工作经验交流材料
2015/11/02 职场文书