前端特殊字符串的一些问题
2018-01-12 本文已影响0人
keenjaan
本文记录项目开发中遇到的一些问题,怕自己忘记了,所以做个标记记录下来方便以后深入学习。可以忽略本篇文章。
前段时间开发时遇到个问题,公司测试妹子说这个页面有报错,页面不能正常显示。我的第一反应是怎么可能,心里想着我写的代码很少有bug的,并且我已经测试过了,没有问题啊(自恋了)。于是我回了句,你看一下是不是后端接口报错了。没一会儿,妹子回话了,接口没有报错,是你的bug赶紧修改下。
于是我放下手里的活,要了测试账号开始调试起来,最后定位到是个json解析错误。我将要解析的字符串打印出来,发现该字符串不是json格式的,很明显的被截断了。找了很长一段时间加上询问才找到问题根源。原来测试妹子在测试接口时,上传了特殊字符,一个手指图标。是utf-8的四字节特殊字符。而后端mysql数据库并不支持这类特殊字符的储存,就直接截断了,导致返回数据json解析时报错了。
所以主要是后端来解决,有三种方式:
1、最简单的是升级mysql到5.5.3版本,该版本支持特殊字符,
2、直接过滤掉特殊字符。
3、就是读取时要进行其他转码。
这里有篇文章关于4字节utf-8乱码问题解决方案
后面测试时又遇到一个问题,在登录的时候,发现一个手机号通过不了验证,看着又没有问题,最后发现由于手机号码是复制的,复制的号码前带有一个特殊的unicode字符,导致验证不通过。但是这个字符不占任何位置,看上去就跟没有一样。它就是\u202d这个字符。
说到这个字符就要说到\u202e这个字符,这两个字符是一对,\u202e是对字符进行反转,\u202d是将反转的字符恢复正常。他们都不占据位置,所以正常情况下根本看不到。
关于这些特殊编码,有好多坑,做个记录,有时间要看看。