字符串的处理在任何程序中应该是最最常见的了吧。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按位与运算,确定是否进行左右去除
去除一个字符的情况:
对于左边去除,遍历字符串的每个字符,把第一个与what不相等的字符的位置作为新字符串的起始位置,同时更新长度
对右边去除,从右边开始遍历,找到第一个不等于what的字符,把字符串长度减去遍历次数。
到这里,新字符串起始位置有了,长度也确定了,然后执行字符串赋复制命令,返回去除之后的字符串
去除多个字符串的情况:
首先使用一个mask数据,用于标记那些需要去除的字符串(mask 可以理解为一个以字符ascii值为键值的hash表)。 然后执行操作跟去除一个字符类似,只是结束条件是寻找到第一个不在字符表里的元素。
默认情况:
处理方式跟之前一样,只是去除内容限制在ascii码小于32(即空格)的字符。且只去除'\r','\t','\v','\0','\n'字符
看到这里,我们所了解到的有一下几点:
1、trim 默认去除'\r','\t','\v','\0','\n'
2、trim 给定单个字符是一个循环操作,循环结束条件是第一个不相等的字符
3、trim 多个字符去除,是循环去除,直到遇到第一个不在列表中的字符。
在来看php_charmask这个函数
中间省略部分可以不看,只是对非法数据的一个错误返回。
只要看第一个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 函数并不简单》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Python 拓展之特殊函数(lambda 函数,map 函数,filter 函数,reduce 函数)
- Python 函数调用&定义函数&函数参数
- python基础教程:函数,函数,函数,重要的事说三遍
- C++函数中那些不可以被声明为虚函数的函数
- 017.Python函数匿名函数
- 纯函数:函数式编程入门
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
创业就是要细分垄断
李开复、汪华、傅盛 / 文化发展出版社 / 2017-5-1 / CNY 45.00
对各方面资源极为有限的创业公司而言,想在激烈的市场竞争中站立下来的第一步是:成为细分市场的垄断者。不管是资本还是尖端人才,追逐的永远是行业里尖端的企业,第二名毫无意义。 首先,要精准定位潜在市场。这个市场的需求仍没有被满足,并且潜力巨大。其次,抓住时代和行业的红利,通过高速增长实现“小垄断”,抢滩登陆。最后,在细分领域里建立起自己的竞争壁垒,应对巨头和竞争对手的复制,去扩展更大的市场,从而扩......一起来看看 《创业就是要细分垄断》 这本书的介绍吧!