最简单的 PHP trim 函数并不简单

栏目: PHP · 发布时间: 7年前

字符串的处理在任何程序中应该是最最常见的了吧。php 的trim函数就是用来去除字符串的字符串。最常用的就是去除空格了。但是,这个简单的函数,是否真的像你认为的那样简单呢?

trim函数的定义如下:

trim是两边去除,还有ltrim 从左边去除,rtrim从右边去除,在 php 源码中,最终都是通过一个函数处理的。所以一下关于trim是对php 内部统一的trim而言。

源码在ext/standard/string.c中php_trim函数中。

trim函数处理逻辑:

1、判断是否设置去除内容what,没设置则去除默认字符串

2、判断去除内容的长度,分为1个字符,多个字符去除

3、使用model分别与1,2按位与运算,确定是否进行左右去除

去除一个字符的情况:

最简单的 PHP trim 函数并不简单

对于左边去除,遍历字符串的每个字符,把第一个与what不相等的字符的位置作为新字符串的起始位置,同时更新长度

对右边去除,从右边开始遍历,找到第一个不等于what的字符,把字符串长度减去遍历次数。

到这里,新字符串起始位置有了,长度也确定了,然后执行字符串赋复制命令,返回去除之后的字符串

去除多个字符串的情况:

最简单的 PHP trim 函数并不简单

首先使用一个mask数据,用于标记那些需要去除的字符串(mask 可以理解为一个以字符ascii值为键值的hash表)。 然后执行操作跟去除一个字符类似,只是结束条件是寻找到第一个不在字符表里的元素。

默认情况:

最简单的 PHP trim 函数并不简单

处理方式跟之前一样,只是去除内容限制在ascii码小于32(即空格)的字符。且只去除'\r','\t','\v','\0','\n'字符

看到这里,我们所了解到的有一下几点:

1、trim 默认去除'\r','\t','\v','\0','\n'

2、trim 给定单个字符是一个循环操作,循环结束条件是第一个不相等的字符

3、trim 多个字符去除,是循环去除,直到遇到第一个不在列表中的字符。

在来看php_charmask这个函数

最简单的 PHP trim 函数并不简单

中间省略部分可以不看,只是对非法数据的一个错误返回。

只要看第一个if的内容。如果字符串假设传入内容what='a..f'。input指针指向a,这个时候满足if条件,在里面执行的操作相当于把a,b,c,d,e,f内容添加到mask中去。所以所trim是可以指定去除区间的 trim('abcdefg','a..f') 返回内容只剩下g。

下面几个实际的输出更容易理解:

1、trim('abcdf' , 'fd'); 输出abc, trim不是按顺序的 ,只要在列表内,统统去掉

2、trim('abccdffff' , 'f'); 输出abccd,  trim会把所有满足条件的去掉

3、trim('abcdffff' , 'a..d'); 输出内容ffff,  trim 可以指定区间,但是如果你真的想要去除'a..d',就不能用trim了

trim去除列表的性质,在多字节处理的时候就会出现问题了,这也就是为什么trim对于中文会产生乱码。

trim('品、' , '、'),'品' utf字符十六进制表示为'e5 93 81', 字符串'、'的十六进制表示'e3 80 81'。在trim中,按字节计算,utf8中文编码3个字节表示一个汉字。因此相当于trim去掉内容是三个字符。这三个字符的十六进制表示为'e3 80 81'。所以最终返回字符串的十六进制表示为'e5 93',因为81已经被去除了。

trim('的、', '、') 就能返回正确结果。因为'的'的十六进制表示'e7 9a 84'。

所以trim并不简单。要时刻记着,trim是去除列表内的所有字符,遇到第一个非列表字符停止!!


以上所述就是小编给大家介绍的《最简单的 PHP trim 函数并不简单》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Beginning PHP and MySQL 5

Beginning PHP and MySQL 5

W. Jason Gilmore / Apress / 2006-01-23 / USD 44.99

Beginning PHP and MySQL 5: From Novice to Professional, Second Edition offers comprehensive information about two of the most prominent open source technologies on the planet: the PHP scripting langua......一起来看看 《Beginning PHP and MySQL 5》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具