题记:
今天和老婆用微信聊天,她先发个消息,然后撤回,撤回居然提示内容是“丹宝贝“撤回了一条消息并给你唱了一首歌””,如图。我很好奇这是怎么做到的,于是百度得到了下文的结果。
以下转载自果壳网:http://www.guokr.com/question/625731/?answer=842422
嘛其实就是逆序了一下,然后用了一个“从右到左”的unicode控制符……
(以下是冗长的说人话版本)
unicode是一种在网页上显示文字的规范。因为它希望显示全世界所有语言的文字,而有些语言的文字是从右往左写的,所以它必须处理这个问题。
因此它发明了很多控制符,其中一个叫U+202E:“右至左覆盖”。系统在读到这一个控制符的时候,会立刻开始把显示顺序修改为从右到左。
相对应的,另一个U+202D就是“左至右覆盖”。
正常情况下,一种文字要么从左到右,要么从右到左,不会混着来。但是如果有人故意要混着玩,就会出现有意思的场景。
好比说有一个用户叫果壳网,在微信里撤回信息的时候,会显示“果壳网撤回了一条消息”
现在我改名“果壳网U+202E手短小只一了扔你向并U+202D”
系统就会试图显示“果壳网U+202E手短小只一了扔你向并U+202D撤回了一条消息”
它会先依次显示“果壳网”三个字:
果I
果壳I
果壳网I
(I代表下一个字符将会出现的位置)
然后它发现了U+202E控制符,得令,开始从右边向左书写了:
果壳网 I手
果壳网 I短手
果壳网 I小短手
……
果壳网 I并向你扔了一只小短手
然后它又发现了U+202D,恢复正常,又开始从左往右输入了:
果壳网 撤I 并向你扔了一只小短手
果壳网 撤回I 并向你扔了一只小短手
果壳网 撤回了I 并向你扔了一只小短手
……
果壳网 撤回了一条消息 并向你扔了一只小短手
Success.
(友情提示:这需要改微信本名,改群昵称没用)
(不过据说微信服务器端已经封锁了这个符号所以无所谓啦)
——————————
如果你的这个效果是自己写的,那么你肯定知道发生了什么。
如果你是用网页生成的,比如 ruguoapp.com/unicode.html
那么查看一下源代码,里面值得注意的就两行
1 2 |
suffix = reverse(suffix); document.write("<h1 style='padding: 100px 100px'>"+name+"‮"+suffix +"‭</p>") |
第一行的作用是把你输入的后缀反序;
第二行的作用是把这个后缀前后加上所需的控制码。‮ 就是 U+202E,‭就是 U+202D。
—
附上生成工具:
不标注来源,不贴上第一次体验的截图,你老婆表示无法原谅你
好啦,小弟知错,这就加上啊