本篇文章给大家带来的内容是关于php trim函数的详细解析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

字符串的处理在任何程序中应该是最最常见的了吧。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是去除列表内的所有字符,遇到第一个非列表字符停止!!

trim函数实现php,php trim函数的详细解析相关推荐

  1. 下述代码每句函数都表达什么意思,可以详细解析下马?template typename PointT, typename Dist int pcl::KdTreeFLANNPointT, Dis...

    我可以这么解释:template <typename PointT, typename Dist> 表示这是一个模板类,它接受两个参数:PointT(点类型)和Dist(距离).int p ...

  2. mysql函数之ltrim(),rtrim(),trim()

    mysql函数之ltrim(),rtrim(),trim() 提前总结: ltrim():去除字符串左边的空格 rtrim():去除字符串右边的空格 trim(): 去除字符串两边的空格 ltrim( ...

  3. trim函数实现php,php trim函数实例代码

    在php编程中, trim() 函数从字符串的两端删除空白字符和其他预定义字符. 去掉前后的空格. 假设有一个字符串" ddd dd d ",经过trim()之后成为"d ...

  4. php 去字符串空格函数,PHP 字符串去除空格函数trim

    trim(), ltrim(), rtrim() 在PHP获取表单的信息时,我们通常会对表单中的字符串进行处理,其中最基本的处理就是去除字符串两边的空格. 下面将介绍trim()系统函数的语法和使用: ...

  5. mysql的字符串函数大全_MySQL的字符串函数大全

    ASCII(str) 返回字符串str的最左面字符的ASCII代码值.如果str是空字符串,返回0.如果str是NULL,返回NULL. mysql> select ASCII('2'); -& ...

  6. MySQL创建字段+数据处理函数+汇总数据(聚集函数)+分组数据

    [0]README 0.1)本文部分文字描述转自"MySQL 必知必会",旨在review"MySQL创建字段+数据处理函数+汇总数据(聚集函数)+分组数据" ...

  7. mysql独有的函数_数据库之MySQL函数(一)

    一.数学函数 1.绝对值函数 ABS(x) :返回 x 的绝对值 mysql> select ABS(2),ABS(-2.3),ABS(-22); 返回的结果如下: 数学学得好的大佬应该知道(本 ...

  8. mysql函数使用场景_mysql的函数和存储过程的比较,以及在实际场景中的使用案例...

    一.存储过程和函数的区别 函数调用有返回值 存储过程调用用call语句,函数调用直接饮用函数名+参数 IN,OUT,INOUT 只适用于存储过程,对函数而言所有参数默认都是输入参数 IN用于把数值传入 ...

  9. java el 函数_javaweb基础(30)_EL函数库

    1 2 3 4 5 6 7 8 EL函数库中的方法使用范例 9 10 11 12 fn:toLowerCase函数使用范例: 13 14 它接收一个字符串类型的参数.fn:toLowerCase(&q ...

最新文章

  1. pandas重置dataframe的索引(reset_index)、如果索引不匹配dataframe操作时候的问题、重置索引(不设置drop=true)远索引生成新的数据列
  2. 吴恩达机器学习(第一章)——初识机器学习
  3. 数据连接java面试题
  4. CVE-2018-1111漏洞复现-环境搭建与dhcp命令注入
  5. facebook人脸照片_为什么您的Facebook照片看起来如此糟糕(以及您可以如何做)...
  6. iOS 的 XMPPFramework 简介
  7. mysql统计同一字段重复的个数
  8. python生成器与迭代器。
  9. oracle中右表有过滤条件的left outer join
  10. 苹果Mac AI 智能图像降噪工具:Topaz DeNoise AI
  11. 基于STM32F103ZET6 HC_SR501人体红外感应
  12. MVC学习系列7--下拉框的联动
  13. 最后的答辩之银行电话营销响应模型
  14. 牛客网_Wannafly模拟赛1
  15. java通过银行账号获取银行名称
  16. ImageView加载本地图片资源
  17. ubuntu12.04安装出现系统内部错误
  18. [电动智能汽车-7]:汽车CAN总线详解
  19. 一键安装 kX3552 ProFX312 UFX52 程序
  20. 李开复:未曾公布的乔布斯故事

热门文章

  1. React Native Elements
  2. 6.Swift协议|扩展|访问权限|异常调试|类型转换|运算函数|ARC|类类型初试化器|值类型初始化器...
  3. 【百度网盘下载】用工具IDM下载器
  4. [数据库汇总]-- sql 的基本知识
  5. BZOJ3781小B的询问
  6. mysql和shell学习日报
  7. 用python计算身体BMI指数
  8. 【技术引擎——汇聚IT思想之间的碰撞】
  9. 浮选泡沫让人很迷迷茫但矿物浮选消泡剂反而轻松解决解决泡沫
  10. 东方木在温州电脑市场买的联想笔记本win10如何关闭防火墙和杀毒软件