“撤回了一条消息并”的原理
提示
本篇文章假设你的阅读顺序是从左到右的。并假设你知道 JavaScript 中转义字符相关的知识。
本文中出现的术语
- RTL 即 Right To Left 右到左
- LTR 即 Left To Right 左到右
如果你不想看我的探索历程,那你可以直接跳到最下方。
挺久以前我在 QQ 上就见过这一种蜜汁消息了,但是那时候我还不清楚这是什么原理。就在昨天晚上,我在 B 站上面看到了一个可以将文字倒过来显示的字符,作为一个搞程序的,我当然不会看过就过了,于是我把这一字符粘贴到了 Unicode 上,得到了如下结果:
编码:0x202E
描述:RIGHT-TO-LEFT OVERRIDE
原来如此,于是我又翻了一下其他邻近的字符,我又发现了下面三个字符:
编码:0x202D
描述:LEFT-TO-RIGHT OVERRIDE
编码:0x200F
描述:RIGHT-TO-LEFT MARK
编码:0x200E
描述:LEFT-TO-RIGHT MARK
嗯,就差不多这四个字符有意思,我下面分别说说这四个字符的用处。
0x202E
首先是 RIGHT-TO-LEFT OVERRIDE,如果你在一个普通 LTR 字符串中间加入这个字符,那么在这一个字符后面的所有字符都会被反向显示,也就是说从这个字符开始的显示方向被改成 RTL。
上图是我在 Chrome Dev Tools 的控制台中的截图,第一行是我的输入,\u202E
是该字符的转义,然后在第二行的输出中,后面的字符被倒过来显示了。
0x202D
0x202D
则与 0x202E
相反,这个字符会把原来是 RTL 的显示顺序重写为 LTR。
所以我们可以这样做:
0x200F
0x200F
可以使字符串右对齐,并且似乎出现在行首时才会有效。
这个字符在安卓的输入框中可以使输入的文本向右对齐,大家可以通过 Unicode 来复制这个字符到剪贴板。
因为这一个字符在 Chrome Dev Tools 里面看不到效果,我就不贴图片了。
0x200E
0x200E
与 0x200F
的作用相反,如果字符串已经被居右了,那么可以通过这一个字符串改回居左。
好戏上演
通过上文,预备知识已经完整了,制作蜜汁撤回消息只需要前两个字符。
还记得这张图片吗?用来表示字符串的黑色引号被 RTL 的 123456 顶到了中间。
我们这么试试:
变量 nick
是我们在 QQ 群中的名片,而变量 c
则是 QQ 要在名片后面加入的东西,然后我们将这两个字符串连接并输出,可惜是乱的。
稍微改动一下,把 nick
后半部分反过来写:
好!后半部分显示正常了,可是现在中间部分还不尽如人意,我们再加一些东西:
大功告成!我们现在可以把群名片改了然后去撤回一条消息来装逼了!有了上面的预备知识,大家还可以在其他许多地方搞事情,祝大家玩得愉快!我要去学习了。
距离高考还剩 81 天。