-
描述
最近在排查网站业务时,发现有数据匹配失败的情况
肉眼上完全看不出问题所在
当把字符串 【'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字符