零宽字符妙用

最近了解到零宽字符,觉得挺有意思的,这里就Mark下。

如上即是我使用零宽空格发送的一条”空”微博,成功了,但同样方法微信朋友圈及推特不可以,应该是判空逻辑过滤了零宽字符。

OK,开启正文

零宽字符

Unicode字符中有一类特殊的字符叫做零宽字符,零宽这个词应该会很熟悉,正则的断言即叫零宽断言,意思即本身并不占用宽度,因此比较好理解。

零宽字符依然是字符因此也占用字符空间,但一般软件下并不会显示,比如新浪微博,浏览器,Excel,微信等等。

零宽字符有几种:零宽空格和零宽连接符、零宽非连接符。

  • 零宽空格U+200B
  • 零宽连接符 U+200D
    • 常见的复杂Emoji表情即用到了该字符,用于表示多字符关系从而合成复杂新字符
  • 零宽非连接符 U+200C
  • 零宽非断空格符 U+FEFF
  • 左至右符U+200E
  • 右至左符U+200F

妙用

  • 水印

    • 对于一些对版权要求很严格的网站,将文章访问用户名转换为零宽字符,隐藏在文章内容中,既不影响阅读,也可以标记了用户信息,一旦文章内容泄漏,直接解码中用户名即可了解到信息泄漏的源头。

      如下图,左边即是我们看到的信息,但是实际上我编码了我的名字放进了信息中,右图即为解码后获取的名字

  • 逃脱关键词匹配

    • 将零宽字符放在关键词中间,即可逃脱部分关键词匹配程序

不可见性

如上,这些字符在一般软件下是不可见的,如果想看见,可以通过比如VSC,IDEA等开发工具创建文本文件,粘贴进即可看到这些隐藏的字符。

工具推荐

如果想实现零宽字符对于文本增加水印,可以参考以下工具实现即可