php 去除变态空格字符方法,空格trim不掉问题解决思路
2024-08-27 08:37:07
前言:今天过滤一段文本,后面有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",成功去掉该变态空白字符。
最新文章
- CentOS7 虚拟机搭建、初始设置、简单使用
- 在线文档预览方案-office web apps续篇
- poi导出excel通用类
- java 工具类
- Notepad++中NppExec的使用之一:基本用法
- jquery更改Reaper某一列的值
- object to primitive in javascript
- css行级块级区别总结摘录
- stringstream转换CString为string出错
- R语言︱排序问题
- 1、java的数据类型
- 整理了一周的Python资料,包含各阶段所需网站、项目,收藏了慢慢来
- WPF 格式化输出- IValueConverter接口的使用 datagrid列中的值转换显示
- python之 可迭代 迭代器 生成器
- solidity ecrecover
- 看开源代码利器—用Graphviz + CodeViz生成C/C++函数调用图(call graph) - 转
- HTML5 本地文件操作之FileSystemAPI实例(一)
- IO流(1)File类构造方法
- 2018.10.23 NOIP模拟 “新”的家园(缩图+dijksta/spfa)
- CF 553E Kyoya and Train