博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOS 11 通讯录手机号「隐形字符」Bug的处理
阅读量:6343 次
发布时间:2019-06-22

本文共 780 字,大约阅读时间需要 2 分钟。

开篇是这样的,由于一个客户使用手机号登录的时候复制了手机通讯录里面的号码,导致登录失败,服务器识别不出用户的登录手机号,操作如下:

复制出来的通讯录查了一下格式就会发现「130 5755 xxxx」的长度是15见下图(盗来的)
我们再来看下 URI 编码结果:「%E2%80%AD130%205755%207808%E2%80%AC」,有没有发现问题? %E2%80%AD, %E2%80%AC是什么鬼?

我们知道,通过 encodeURIComponent 可把字符串作为 URI 组件进行编码,但不会对 ASCII 的字母、数字和- _ . ! ~ * ' ( ) 这些特殊的字符进行编码,其余的全部使用十六进制编码表示,如空格将被转换为 %20,但 %E2%80%AD 和 %E2%80%AC 是从什么转换过来的就有意思了,一个「看不见」且「不占空间」的字符!

以上内容部分出处来自:https://github.com/zwwill/blog/issues/12

具体解决思路就是通过比对0~9重新组装一个字符串出来,代码如下:

/// 过滤苹果通讯录自带的隐藏字符,使用数字提取获得号码+ (NSString *)FiltrationPhoneNumberHideStr:(NSString *)phoneNumber; {    NSString *str = [[NSString alloc] init];    NSArray *Numbers = @[@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"0"];    for (int i = 0; i

如果有什么错漏或者表述不清楚欢迎留言!

转载于:https://juejin.im/post/5a52dc14518825733e604a28

你可能感兴趣的文章
flask ORM: Flask-SQLAlchemy【单表】增删改查
查看>>
vim 常用指令
查看>>
nodejs 获取自己的ip
查看>>
Nest.js 处理错误
查看>>
你好,C++(16)用表达式表达我们的设计意图——4.1 用操作符对数据进行运算...
查看>>
[转] Mac下 快速写博客的软件 MarsEdit
查看>>
Unity的赛车游戏实现思路
查看>>
[Android UI] Shape详解 (GradientDrawable)
查看>>
边学边体验django--HttpRequest 对象
查看>>
18.3 redis 的安装
查看>>
jdbc 简单连接
查看>>
多态初步认识
查看>>
数组处理:118
查看>>
为什么要优先使用组合而不是继承 .
查看>>
【MySql】权限不足导致的无法连接到数据库以及权限的授予和撤销
查看>>
android实现gif图与文字混排
查看>>
安卓新标准出台_告别乱弹窗_你的手机真会省电么?
查看>>
hdu1384Intervals(差分约束)
查看>>
python 字符编码
查看>>
269D Maximum Waterfall
查看>>