今天写代码时遇到一个中文字符串截取的问题,原来简单的想直接用substr()来,但这个是在单字节符下用的,对于多字节编码的汉字或是其它语言字符中,这个函数就不能能用了,容易截出乱码来!

现在做下工作记录和总结分享:

问题产生及使用案例网站:天气预报15天查询(http://tqybw.net)

问题时间:2013-10-20

解决思路:把汉字按一个汉字在编码下按其在完整性正则分割成数组,再根据需要取截取长度;

1、实现方法函数

开启mbstring扩展,然后自定义函数:

12345678910111213<?phpheader ('content-Type:text/html:charset=utf-8');function substr_chinese($str, $start, $length =null) {return join("",array_slice(preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY), $start, $length));}//实例$str ="中国地图全图";echo substr_utf8($str,0,4);//输出: 中国地图?>

2、主要函数功能说明preg_split:

对于初学者来说,大家对 说明 array preg_split ( string $pattern, string $subject [, int $limit [, int $flags]] )

返回一个数组,包含 subject 中沿着与 pattern 匹配的边界所分割的子串。

如果指定了 limit,则最多返回 limit 个子串,如果 limit 是 -1,则意味着没有限制,可以用来继续指定可选参数 flags。

flags 可以是下列标记的任意组合(用按位或运算符 | 组合):

PREG_SPLIT_NO_EMPTY

如果设定了本标记,则 preg_split() 只返回非空的成分。

PREG_SPLIT_DELIM_CAPTURE

如果设定了本标记,定界符模式中的括号表达式也会被捕获并返回。本标记添加于 PHP 4.0.5。

PREG_SPLIT_OFFSET_CAPTURE

如果设定了本标记,如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其在 subject 中的偏移量。本标记自 PHP 4.3.0 起可用。

提示

如果不需要正则表达式的功能,可以选择使用更快(也更简单)的替代函数如 explode() 或 str_split()。

3、array_slice说明:

array_slice() 函数在数组中根据条件取出一段值,并返回。

<?php $a=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird");print_r(array_slice($a,1,2));?>输出:Array ( [0] => Cat [1] => Horse )

php preg_split,php汉字截取函数_preg_split()相关推荐

  1. php函数汉语,PHP汉字截取函数:UTF-8、GB2312双支持

    经测试代码如下: /* Utf-8.gb2312都支持的汉字截取函数 cut_str(字符串,截取长度,开始长度,编码); 编码默认为 utf-8 开始长度默认为 0 */ function cut_ ...

  2. php汉字的截取,php汉字截取

    /* Utf-8.gb2312都支持的汉字截取函数 cut_str(字符串, 截取长度, 开始长度, 编码); 编码默认为 utf-8 开始长度默认为 0 */ function cut_str($s ...

  3. php 中文字符串截取函数--比较好的

    <? #============================================================================ # 中文字符串截取函数 # 参数 ...

  4. 高效的中文字符串截取函数

    高效的中文字符串截取函数 作者:徐祖宁 在php中使用传统的字符串截取函数substr处理含有中文字符的字符串时会出现汉字被切断的现象.当可以使用php扩展库时,我们可以用mb_substr代替.但是 ...

  5. c语言中有裁剪字符串的函数吗,C语言中的字符串截取函数

    /*======================================================== 子数整数 源程序名 num.??? (pas,c,cpp) 可执行文件名 num. ...

  6. js字符串截取函数的三种方式(slice()、substring()、substr())

    在js中字符截取函数有常用的三个slice().substring().substr()了,下面我来给大家介绍slice().substring().substr()函数在字符截取时的一些用法与区别吧 ...

  7. php返回第一个字符串的码点_PHP 字符串编码截取函数

    一个效率更高的全半角字符串截取函数 [原创,转载请注明:[url]http://wfyang.blog.51cto.com[/url]]现在流传的那几个字符串截取函数,一般都是对字符串进行循环判断,如 ...

  8. php截取中文第一个字,php中的一个中文字符串截取函数

    PHP代码: -------------------------------------------------------------------------------- /** ***@Auth ...

  9. nodejs 截断字符串_js字符串截取函数slice()、substring()、substr()

    在js中字符截取函数有常用的三个slice().substring().substr()了,下面我来给大家介绍slice().substring().substr()函数在字符截取时的一些用法与区别吧 ...

最新文章

  1. android 三级界面返回直接到一级界面
  2. 华为自研编程语言「仓颉」火上热搜,已正式开启内测,成员辟谣:不是中文编程...
  3. js实现表格无缝滚动效果
  4. 滴滴出行首次进军非洲市场,网络推广外包后的滴滴想去的国家还有很多
  5. 给页面字段中添加一个按钮,点击按钮实现弹窗效果
  6. 《机器学习实战》朴素贝叶斯
  7. 科研经费管理新规定——劳务费从15%变为上不封顶
  8. 学web前端有什么计划?
  9. 如何成为一个优秀的测试工程师?必备的9大职业素质盘点
  10. 关于instanceof、isinstance和isAssignableFrom的区别
  11. Git Extensions 2.33出现unhandled exception has ……解决方法
  12. 导出(合并)手机QQ浏览器下载的视频
  13. 时间序列可预测性度量
  14. string之取子串
  15. 某大厂程序员吐槽外包员工是大爷
  16. 基于思维导图的研究生创新能力培养
  17. 图片服务器 imgproxy 入门教程--实现图片实时裁剪/压缩/处理等操作
  18. 【题目】一根长度为M厘米的木棍上有n只蚂蚁,每只蚂蚁要么朝左爬,要么朝右爬,速度为每秒1厘米。当两只蚂蚁对撞时,二者同时掉头(掉头时间忽略不计)。给出每只蚂蚁的初始位置和朝向,计算T秒后每只蚂蚁的位置
  19. eclipse插件安装失败的列表如何清除-一个困扰很久的问题
  20. Apple Watch应用开发 2

热门文章

  1. 曾经“杀手级”的桌面语言 Java 将要退隐江湖?
  2. 微软成Eclipse基金会战略伙伴
  3. 因一个 Bug,Cassandra 4.0 暂停发布
  4. 巨杉数据库完成数亿元D轮融资,引领金融级分布式数据库发展
  5. 挑战 TensorFlow、PyTorch,“后浪”OneFlow 有没有机会?
  6. 滴滴上线自动驾驶服务;微软宣布将永久关闭实体店;.NET 5.0 Preview 6 发布 | 极客头条...
  7. 老板:kill -9 的原理都不知道就敢在线上执行?
  8. 华为鸿蒙 OS 2020 计划曝光!手机仍然优先用安卓
  9. “万物互联·泛在智能” 2019 嵌入式智能国际大会烧脑开幕!
  10. 程序员去交友网站找女友,结果意外了...