微信QQ群里的搞怪


data:text/html;charset=utf8,
<script>document.write(‘微信昵称‘+String.fromCharCode(8238)+‘撤回后的文字‘.split(").revers().join(")+String.fromCharCode(8237))</script>

8238(202E)代表RLO,强制字符成为从右到左的字符。
8237(202D)代表LRO, 强制字符成为从左到右的字符。

小明RLO脸的你了摸并LRO撤回了一条消息
小明息消条一了回撤LRO并摸了你的脸
小明撤回了一条消息并摸了你的脸

&#8238;股屁的你了踢并&#8237;
&#x202E

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
那么查看一下源代码,里面值得注意的就两行
suffix = reverse(suffix);
document.write("<h1 style=‘padding: 100px 100px‘>"+name+"&#8238;"+suffix +"&#8237;</p>")

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

微信QQ群里的搞怪

上一篇:Erdaicms旅游网站系统微信和手机端分销系统正式上线发布啦


下一篇:Json乱码处理方式