微信里那个“XXX撤回一条消息并亲了你一下”是怎么实现的?[转载]

题记:

今天和老婆用微信聊天,她先发个消息,然后撤回,撤回居然提示内容是“丹宝贝“撤回了一条消息并给你唱了一首歌””,如图。我很好奇这是怎么做到的,于是百度得到了下文的结果。

1761255865

以下转载自果壳网: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

那么查看一下源代码,里面值得注意的就两行

第一行的作用是把你输入的后缀反序;

第二行的作用是把这个后缀前后加上所需的控制码。&#8238 就是 U+202E,&#8237就是 U+202D。

附上生成工具:


2条评论

  1. 不标注来源,不贴上第一次体验的截图,你老婆表示无法原谅你

    1. 好啦,小弟知错,这就加上啊

发表评论

电子邮件地址不会被公开。 必填项已用*标注