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",成功去掉该变态空白字符。

原文地址:https://www.cnblogs.com/-mrl/p/10026356.html

时间: 2024-10-10 14:54:34

php 去除变态空格字符方法,空格trim不掉问题解决思路的相关文章

NSString去除两边空格字符,like trim()[转]

NSString *cleanString = [dirtyString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 还有就是去除多于的空格,如下: NSString *theString = @"    Hello      this  is a   long       string!   "; NSCharacterSet *whitespaces = [N

Java方法trim()所不能删除的字符串两端的全角空格删除方法

String testStr = " 西式灯饰受欢迎 尽情演绎奢华味道"; testStr = testStr.replaceAll("[ | ]", " ").trim(); 如代码所示,直接用半角空格直接替换调字符串中所有的全角空格,然后再用trim()方法即可. 网站编辑往往不小心在全角和半角之间切换,导致很多新闻正文中含有两种空格的混合,这里就给大家介绍这一个:去除全角空格的方法,如上代码所示.

Python中去除字符串中空格的方法

Python中去除字符串中指定字符或者空格的方法有几种: str.strip() //该方法用于去除字符串开头和结尾的指定字符或字符串(默认为空格或换行符) str.lstrip() //该方法用于截掉字符串左边的空格或指定字符 str.rstrip() //该方法用于截掉字符串右边的空格或指定字符 所以若是要去除字符串中所有的空格可以使用如下方式: str.strip().lstrip.rstrip() 原文地址:https://www.cnblogs.com/EdenChanIy/p/993

Python 中去除字符串空格的方法

方法一:strip方法 , 去除字符串最左和最右的空格 string = '  a  b  c   ' print( string.strip() ) #OUTPUT >>'a b c' 方法二:lstrip方法, 去除字符串最左的空格 print( string.lstrip() ) #OUTPUT >>'a b c  ' 方法三:rstrip方法, 去除最右的空格 >>'  a b c' 方法四:replace方法, 把空格替换为其他字符 print( string

Python关于去除字符串中空格的方法

Python关于去除字符串中空格的方法 在编写程序时我们经常会遇到需要将字符串中的空格去掉的情况,通常我们可以使用下面几种解决方法: 1.strip()方法:该方法只能把字符串头和尾的空格去掉,但是不能将字符串中间的空格去掉. s=' This is a demo ' print(s.strip()) lstrip():该方法只能把字符串最左边的空格去掉. s=' ! This is a demo ' l='!' print(s.lstrip()+l) rstrip():该方法只能把字符串最右边

01-JavaScript中去除字符串空格的方法

语法 string.trim() 参数值 无 返回值 类型:string 描述:返回移除头尾空格的字符串 技术细节 JavaScript版本: ECMAScript 5 去除字符串左右两端的空格,在vbscript里面可以使用trim.ltrim 或 rtrim,但在js中却没有这3个内置方法,需要手工编写.下面的实现方法用到了正则表达式,效率不错,并把这三个方法加入String对象的内置方法中去. 写成类的方法格式如下:(str.trim();) <script language= "j

python中将指定的字符串转换为大写字母并每隔2个字符用空格分割后得到一个新字符串的方法

在例子中对指定的字符串: faa5fbb5fcc5fdd5010200000028000001900000000a002d00000000017d7840000003e800005fa55fb55fc55fd5 使用了三种方法将其转换为大写字母并每隔2个字符用空格分割处理后得到一个新字符串,为: FA A5 FB B5 FC C5 FD D5 01 02 00 00 00 28 00 00 01 90 00 00 00 0A 00 2D 00 00 00 00 01 7D 78 40 00 00

去除字符串中空格的方法(2016.1.12P141-2)

1 // forif来处理空格 2 // 方法一 3 String str = " ww sse rr"; 4 5 String str1;// 定义一个中间变量 6 7 String str2 = "";// 定义一个中间变量 8 9 for (int i = 0; i < str.length(); i++) { 10 11 str1 = str.substring(i, i + 1); 12 13 if (!(str1.indexOf(" &q

【Oracle】【7】去掉字符串中的空格/字符

SELECT TRIM(' 去除前后空格 ') FROM DUAL; SELECT REPLACE(' 去除 任意位置的空格 ', ' ', '') FROM DUAL; 扩展: 1,both, trailing, leading (1)默认为删除空格 --结果:<test> SELECT TRIM(BOTH FROM ' test ') FROM DUAL; --结果:< test> SELECT TRIM(TRAILING FROM ' test ') FROM DUAL; -