php轻松实现中英文混排字符串截取

2015-01-24信息快讯网

提到中英文混排计数、截取,大家首先想到的是自己写个截取函数,这在之前的文章中我也提到过,今天我给大家分享的是php的mb扩展,教你如何使用原生态的php函数轻松处理字符串。

先给大家介绍用到的函数:

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扩展里边很有很多好用的函数,这里就不给大家一一列举。

有兴趣的朋友可以查看官方手册

好了,今天就先介绍到这里了。

thinkphp浏览历史功能实现方法
thinkphp获取栏目和文章当前位置的方法
thinkphp实现like模糊查询实例
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
PHP多个文件上传到服务器实例
smarty中英文多编码字符截取乱码问题解决方法
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
php中字符串和正则表达式详解
php中的字符编码转换函数用法示例
PHP实现通过中文字符比率来判断垃圾评论的方法
PHP清除数组中所有字符串两端空格的方法
php中文字符串截取方法实例总结
php实现的替换敏感字符串类实例
php mb_substr()函数截取中文字符串应用示例
可以保证单词完整性的PHP英文字符串截取代码分享
ThinkPHP的截取字符串函数无法显示省略号的解决方法
php中$美元符号与Zen Coding冲突问题解决方法分享
分享一段php获取linux服务器状态的代码
windwos下使用php连接oracle数据库的过程分享
查找php配置文件php.ini所在路径的二种方法
php5.2以下版本无json_decode函数的解决方法
浅析php中json_encode()和json_decode()
PHP学习笔记之字符串编码的转换和判断
php自定义函数截取汉字长度
php小技巧之过滤ascii控制字符
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
php通过数组实现多条件查询实现方法(字符串分割)
PHP生成自定义长度随机字符串的函数分享
PHP的preg_match匹配字符串长度问题解决方法
支持中文和其他编码的php截取字符串函数分享(截取中文字符串)
php截取字符串之截取utf8或gbk编码的中英文字符串示例
php截取中文字符串不乱码的方法
多个PHP中文字符串截取函数
©2014-2024 dbsqp.com