零宽字符
起因:
前端的传值在控件和控制台在以肉眼看来并没有什么问题,但后端收到的值却多出了一些特殊字符(\u200b),导致后端处理数据失败;
了解零宽字符 - \u200b
经查询之后发现 \u200b 是零宽字符系列中的一个,零宽字符是一种不可打印的 Unicode
字符;
零宽字符主要有以下几类:
零宽度空格符 (zero-width space) U+200B : 用于较长单词的换行分隔;
零宽度非断空格符 (zero width no-break space) U+FEFF : 用于阻止特定位置的换行分隔;
零宽度连字符 (zero-width joiner) U+200D : 用于阿拉伯文与印度语系等文字中,使不会发生连字的字符间产生连字效果;
零宽度断字符 (zero-width non-joiner) U+200C : 用于阿拉伯文,德文,印度语系等文字中,阻止会发生连字的字符间的连字效果;
左至右符 (left-to-right mark) U+200E : 用于在混合文字方向的多种语言文本中(例:混合左至右书写的英语与右至左书写的希伯来语),规定排版文字书写方向左至右;
右至左符 (right-to-left mark) U+200F : 用于在混合文字方向的多种语言文本中,规定排版文字书写方向为右至左;
溯源
测试人员复制的丰声聊天框里面的数据(怀疑是不是一种隐形水印的做法?)然后在前端组件中粘贴输入,提交之后发现出现了‘\u200b’的字符;
如何处理
- 后端接收时处理
- 前端输入时处理(input inputText)类似 falsyParamsFilter 函数
1 | const formatData = (data: string) => |
更多有趣的事情
- 颜文字 象形字 图像 icon
eg: ‘\ud83d\udeeb’ (飞机) %28\u0e51\u203e \ua1f4 \u203e\u0e51%29 (๑‾ ꇴ ‾๑) - 隐形水印、加密解密
- 存储隐藏信息
隐形水印
https://github.com/umpox/zero-width-detection
加密 解密
1 | // 每个字符转为二进制,用空格分隔 |
excel 中不可见字符,excel 里最隐蔽的坑
https://www.office26.com/excelhanshu/excel_function_11341.html
参考文献:
https://www.cnblogs.com/goodAndyxublog/p/13383519.html
https://www.jianshu.com/p/64580eb7e9ad
https://juejin.cn/post/6844903902220042254
https://zh.wikipedia.org/wiki/%E9%9B%B6%E5%AE%BD%E7%A9%BA%E6%A0%BC
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Droplets!
评论