不同unicode编码的空格挖的坑

前段时间在做搜索的时候,遇到一个关于空格的小问题,总结一下。

有时在文本值中会插入一些空格字符 (Unicode 字符集值 32 和 160) ,比如说标题之类的。当你对包含空格的值进行排序、 筛选或搜索时,这些字符有时会导致意外的结果。本次就是因为把数据存放在dom节点上,取出来做搜索的时候,发现编码发现了改变(从32变成了160),导致无法正确匹配。

The non-breaking space (U+00A0 Unicode, 160 decimal,  ) is not the same as the space character (U+0020 Unicode, 32 decimal). Well, both of them seems to be a “space”, but they are absolutely different characters.

这里的解决方案是:采用正则替换成统一字符,如下

var s = ' ' // 假设这里是一个160的空格。
var reg = new RegExp(String.fromCharCode(160),"gm");
var 32sp = String.fromCharCode(32)
s = s.replace(reg, 32sp);

后来重构代码,直接废除了将数据存在dom上这种方案,就更好了。

除了空格字符,非打印字符在进行排序、 筛选或搜索操作时,也可能会遇到这类问题,参考。要注意~