昨天帖了一个 字符串首尾空格对数据库查询的影响的帖子 《发现多种数据库 group by 对字符串首尾空格的坑死人不偿命规范》 /t/724866 ,len 、length 、=、!= 、in 数据库查询均受影响,有人怪开发者怎么不去掉结尾空格就存到了数据库😂 数据是数据,不到一定需要的时候,多写一个 trim 都是在篡改用户提交的合法数据,你不能阻止别人发消息给你后面发空格吧
今天又突然发现,微信里面复制出一个手机号,居然查询不出数据,但人肉去翻又能找到这个手机号,如:
"13012345678" length=12,结尾有个 \u202C
嗯,多了一个零宽的控制字符,肉眼不可见,非常难排查。
我是不背锅的,这次这个锅要让苹果来背了,他们出品的手机系统里面复制电话号码似乎就会产生这种问题 \u202D 130123456789 \u202C 。顺利甩锅。
打个针,估计会有人反驳:自己不做格式过滤怪谁,手机号不都是数字的吗😂
感觉纯字符串,要处理掉非法的零宽字符还是异常困难的,至少要维护一个 Unicode 名单,和研读字符的各种控制规则,比如常见的 emoji 拼接字符:\u200D,独立出现就是非法,但在多个 emoji 字节码里面又能准确的表达一个复杂的 emoji 。简单的去掉一些黑名单字符还是可以的,比如胡乱越界显示的泰文
周末祝大家代码无 bug,早日结尾款(或多发奖金)。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.