-
描述
最近在排查网站业务时,发现有数据匹配失败的情况
肉眼上完全看不出问题所在
当把字符串 【'M24308/23-14F'
】复制出来发现 末尾有个不可见的字符使用删除键或左右移动时才会发现
最后测试通过var_dump
打印 发现这个"空字符"占了三个长度 (显示一个小点)
1. 通过了解,基本定位在 业务人员在 excel数据表 复制过程中,意外带来了这个 “不可见字符”
2. 我的目的,就是为了能满足 正常业务的字符串比对
需要去掉 末尾的特殊字符
3. 测试发现,使用 trim()、mb_trim() 都无法去除,最终使用 preg_replace()可进行匹配替换 .
-
测试代码
通过多次测试,与借鉴网上经验,可参考如下测试代码:$string = 'M24308/23-14F'; var_dump($string); $lastChar = mb_substr($string, -1); // 获取最后一个字符 var_dump($lastChar); $asciiValue = mb_ord($lastChar); // 获取最后一个字符的ASCII值 var_dump( "最后一个字符的--ASCII值 是:".$asciiValue); $pattern = "/[\x{200b}-\x{200f}]/u"; $str = preg_replace($pattern, "", $string); var_dump($str);
-
运行结果
-
处理代码如下
//处理型号(可能有 特殊不可见字符) $xingHao = $_notice['型号']??''; $pattern = "/[\x{200b}-\x{200f}]/u"; $xingHao = preg_replace($pattern, "", $xingHao);
-
参考
php 去掉不可见字符串,php删除不可见的Unicode字符