php 去除变态空格字符方法,空格trim不掉问题解决思路
前言:今天过滤一段文本,后面有2个空格,用trim去不掉,用preg_match也去不掉,去网上翻阅了无数的方法,终于找到了非常好的一个解决方法。该文章来源于https://my.oschina.net/fffddgx/blog/196376 ,思路是 ,首先将字符分隔开,str_split, 然后循环每个字节查看他的编码,ord();
trim函数
以php的trim 函数为例: 去除字符串首尾处的空白字符(或者其他字符)
string trim ( string $str [, string $charlist ] ) 第二个参数可以指定要trim掉的字符
如果不指定第二个参数,trim() 将去除这些字符:
" " (ASCII32(0x20)),普通空格符。
"\t" (ASCII9(0x09)),制表符。
"\n" (ASCII10(0x0A)),换行符。
"\r" (ASCII13(0x0D)),回车符。
"\0" (ASCII00x00)),空字节符。
"\x0B" (ASCII11(0x0B)),垂直制表符。
但是空白字符并不只是这些字符。比如全角空格(ascii:227)和一些控制字符,乱码字符等等。全角空格这种情况是比较多的情况,如果确定空白字符是全角空格引起的可以直接
$value = str_replace("全角空格"," ",$value);
这样可以解决大部分问题。如果还是解决不了,恭喜你,你越到了变态数据。
思路
对于变态数据可以考虑用下面的方法处理
1、分割字符串,将字符串分割成以一个字节为单位的字符组: str_split($str)
2、查看空白字符编码。(比如遇到一个变态字符串前面的空格字符是:194 160 194 160,基本可以确定是这个字符的问题)
3、替换掉空白编码 。比如用正则函数:
$value = preg_replace("/^[\s\v".chr(194).chr(160)."]+/","", $value); //替换开头空字符
$value = preg_replace("/[\s\v".chr(194).chr(160)."]+$/","", $value); //替换结尾空字符
例子
如下程序:
//比如字符串: “ abc”(前面是两个全角空格)
$str = " abc";
$sArray = str_split($str);
foreach ($sArray as $s){
var_dump(ord($s));
}
结果:
int(227)
int(128)
int(128)
int(227)
int(128)
int(128)
int(97)
int(98)
int(99)
发现a(97)前有2轮
int(227)
int(128)
int(128)
断定这就是一个utf-8的空白字符,下面的程序去掉这个字符就可以
$str = preg_replace("/^[\s\v".chr(227).chr(128)."]+/","", $str); //替换开头空字符
$str = preg_replace("/[\s\v".chr(227).chr(128)."]+$/","", $str); //替换结尾空字符
var_dump($str);
结果:string(3) "abc",成功去掉该变态空白字符。
php 去除变态空格字符方法,空格trim不掉问题解决思路的更多相关文章
- jquery去除字符串首尾空格的方法:$.trim()
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【转载】C#使用Trim方法去除字符串前后的所有空格
在C#语言程序开发过程中,很多时候需要对字符串对象的前后空格进行去除,此时就需要使用到Trim()方法来实现这个功能,Trim()方法可以快速去除字符串前端和后端的所有空格. 例如有个字符:strin ...
- oracle中如何对字符串进行去除空格的方法
oracle中如何对字符串进行去除空格的方法 今天学习了一下oracle中如何对字符串进行去除空格的方法,这里总结一下.了解到的方法主要有两种:Trim函数以及Replace函数.下面我详细的介绍一下 ...
- Java中去除字符串中空格的方法
昨天写了一个关于Excel文件处理的脚本,在字符串匹配功能上总是出现多余不正确的匹配,debug调试之后,发现一个坑. ------->代码中字符串使用了replaceAll()方法,去除了所有 ...
- Python中常见字符串去除空格的方法总结
Python中常见字符串去除空格的方法总结 1:strip()方法,去除字符串开头或者结尾的空格>>> a = " a b c ">>> a.s ...
- Python关于去除字符串中空格的方法
Python关于去除字符串中空格的方法 在编写程序时我们经常会遇到需要将字符串中的空格去掉的情况,通常我们可以使用下面几种解决方法: 1.strip()方法:该方法只能把字符串头和尾的空格去掉,但是不 ...
- JavaScript中去除字符串空格的方法
语法 string.trim() 参数值 无 返回值 类型:string 描述:返回移除头尾空格的字符串 技术细节 JavaScript版本: ECMAScript 5 去除字符串左右两端的空格,在v ...
- python 中去除空格的方法
python 中去除空格的方法: def trim(s): l=[] for i in s: if i!=' ': l.append(i) return ''.join(l) 其中可以使用下面的 '' ...
- 微信小程序自动去除input空格的方法
当用户输入账号或者密码的时候,可能会有输入空格的情况,但是实际需要是不能够有空格的,所以我们要做一个去除空格,并且适应所有input的name参数的方法,下面请看源码: wxml: <input ...
随机推荐
- 基于PHP给大家讲解防刷票的一些技巧
刷票行为,一直以来都是个难题,无法从根本上防止. 但是我们可以尽量减少刷票的伤害,比如:通过人为增加的逻辑限制. 基于 PHP,下面介绍防刷票的一些技巧: 1.使用CURL进行信息伪造 $ch = c ...
- Cocos2dx项目在各种IDE中新建类之后的可行编译方式
注:这里说可行,但是并不是最好的,只是可以完成编译. 1.linux+code::blocks下的cocos2dx项目新建一个类TestScene.h 新建的TestScene.h和TestScene ...
- css背景图撑开盒子高度
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- super方法 调用父类的方法
描述 super() 函数是用于调用父类(超类)的一个方法. super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO).重复 ...
- str、tuple、dict之间的相互转换
字符串.字典.元祖之间的相互转换: 1.字符串与列表之间的转换 str1 = 'ADMINphuang' '''str--->list''' list1=str1.split('p') prin ...
- Prime Flip AtCoder - 2689
发现我们每次区间取反,相邻位置的正反关系只有两个位置发生改变 我们定义bi为ai和ai-1的正反关系,即ai=ai-1时bi=0,否则bi=1,每次取反l~r,b[l]和b[r+1]会发生改变 容易发 ...
- Brocade SAN交换机常用命令
Brocade SAN交换机常用命令 使用电脑连接Brocade SAN交换机常用命令 使用电脑连接管理网口,默认IP地址为:10.77.77.77,掩码:255.255.255.0 默认用户名:ad ...
- ES6 数值
数值的表示 二进制表示法新写法: 前缀 0b 或 0B . console.log(0b11 === 3); // true console.log(0B11 === 3); // true 八进制表 ...
- 洛谷P3455 ZAP-Queries [POI2007] 莫比乌斯反演+数论分块
正解:莫比乌斯反演 解题报告: 传送门! 首先这题刚看到就很,莫比乌斯反演嘛,和我前面写了题解的那个一模一样的,所以这儿就不讲这前边的做法辣QAQ 但是这样儿还有个问题,就现在已知我每次都是要O(n) ...
- SpringBoot-外部运行jvm参数调优
外部运行调优 java -server -Xms32m -Xmx32m -jar springboot_v2.jar