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字符串分割函数explode的实例代码
Feb 07 PHP
php中session使用示例
Mar 29 PHP
PHP_NETWORK_GETADDRESSES: GETADDRINFO FAILED问题解决办法
May 04 PHP
php+memcache实现的网站在线人数统计代码
Jul 04 PHP
php中函数前加&amp;符号的作用分解
Jul 08 PHP
php ajax异步读取rss文档数据
Mar 29 PHP
PHP简单实现数字分页功能示例
Aug 24 PHP
PHP带节点操作的无限分类实现方法详解
Nov 09 PHP
PHP实现二维数组根据key进行排序的方法
Dec 30 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
Mar 02 PHP
php5对象复制、clone、浅复制与深复制实例详解
Aug 14 PHP
PHP执行普通shell命令流程解析
Aug 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 的异常处理程序
2014/06/22 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
2014/07/14 PHP
ThinkPHP表单自动提交验证实例教程
2014/07/18 PHP
php设计模式之迭代器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
Javascript 按位与运算符 (&amp;)使用介绍
2014/02/04 Javascript
jquery获取对象的方法足以应付常见的各种类型的对象
2014/05/14 Javascript
jquery中EasyUI使用技巧小结
2015/02/10 Javascript
jquery控制页面部分刷新的方法
2015/06/24 Javascript
jfinal与bootstrap的登录跳转实战演习
2015/09/22 Javascript
js操作XML文件的实现方法兼容IE与FireFox
2016/06/25 Javascript
浅谈jQuery中ajaxPrefilter的应用
2016/08/01 Javascript
使用jquery实现的循环连续可停顿滚动实例
2016/11/23 Javascript
Vue.js 动态为img的src赋值方法
2018/03/14 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
2018/06/27 Javascript
JavaScript中this用法学习笔记
2019/03/17 Javascript
微信小程序实现带参数的分享功能(两种方法)
2019/05/17 Javascript
jQuery+ajax实现批量删除功能完整示例
2019/06/06 jQuery
Webpack中loader打包各种文件的方法实例
2019/09/03 Javascript
python实现图片变亮或者变暗的方法
2015/06/01 Python
Python时间戳使用和相互转换详解
2017/12/11 Python
使用Python更换外网IP的方法
2018/07/09 Python
python中文编码与json中文输出问题详解
2018/08/24 Python
Python中反射和描述器总结
2018/09/23 Python
Django3.0 异步通信初体验(小结)
2019/12/04 Python
python FTP批量下载/删除/上传实例
2019/12/22 Python
Pycharm安装并配置jupyter notebook的实现
2020/05/18 Python
HTML5制作3D爱心动画教程 献给女友浪漫的礼物
2014/11/05 HTML / CSS
俄罗斯厨房产品购物网站:COOK HOUSE
2021/03/15 全球购物
JAVA中的关键字有什么特点
2014/03/07 面试题
室内设计自我鉴定
2013/10/15 职场文书
收银出纳员岗位职责
2014/02/23 职场文书
讲文明树新风演讲稿
2014/05/12 职场文书
防邪知识进家庭活动方案
2014/08/26 职场文书
教你用Python爬取英雄联盟皮肤原画
2021/06/13 Python
Python基本数据类型之字符串str
2021/07/21 Python
Python+OpenCV实现在图像上绘制矩形
2022/03/21 Python