wencaizhang

不可见字符引起的 bug

Published onMarch 06, 2024
-Views
1Minutes Read

问题

在做一个爬虫项目的时候,有一个关键字搜索数据功能,明明看起来数据库里有相同的搜索关键字,但死活查不出来结果。
然后发现了一种叫做「不间断空格」的字符,它的主要表现就是看不到但确实存在。这个字符主要用在office中,让一个单词在结尾处不会换行显示,见不间断空格_百度百科

解决

如果是论坛类的网页也经常会出现这个字符,因此需要对这类字符进行清洗,以免污染数据出现开头提到的情况。
在 JavaScript 中可以使用 replace 方法去掉这个字符。

收集的更多的空格

  • :水平制表符
  • :垂直制表符
  • :换页符
  • :不间断空白符
  • :半角空格(英文符号),代码中常用的
  • :全角空格(中文符号),中文文章中使用
  • :不间断空格,主要用在office中,让一个单词在结尾处不会换行显示
  • :HTML 中的空格表示形式

收集的开发中容易被坑的特殊字符编码

名称Unicode备注
普通空格符\u0020
Backspace\u0008\b
水平制表符\u0009\t
换行符\u000A\n
垂直制表符\u000B\v
换页符\u000C\f
回车符\u000D\r
不换行空格\u00A0看上去和空格一样,实际上是在 HTML 中不自动换行,曾在从 word 拷贝出来的文本中复现
行分隔符\u2028
段落分隔符\u2029
字节顺序标记(零宽非连接符)\uFEFF
从左至右书写标记\u200E
从右至左书写标记\u200F
零宽连接符\u200D因为是零宽,肉眼看不到,从网页中拷贝出来的字符中会出现
另一种空格符\u2006看上去和空格一样,但 Unicode 不同

Reference

Tags:
#Bug