How does Zalgo text work?
我在各个论坛上都看到过奇怪的格式化文本Zalgo,如下所示。 看起来很烦人,但它确实使我感到困扰,因为它破坏了我对角色应该是什么样的观念。 我的理解是,角色应该在一条线上水平移动并停留在某个"容器"内。 显然,Zalgo文本是垂直移动的,似乎不受任何空间限制。
这是Unicode中的错误/缺陷/漏洞利用/黑客吗? 这些单个字符是否具有怪异的属性?"什么"在这里发生?
H??????????????o?????????????w?????????????? ???????d??????????o??????????e?????????????s?????????? ???????????????Z??????????a?????????l?????????g?????o??????????? ???????????t?????????e??????????x??????????????t??????????? ??????w?????????????o??????????????r???????k???????????????????????
文本使用组合字符,也称为组合标记。请参阅Unicode标准(PDF)中的组合字符2.11节。
在Unicode中,字符渲染不使用简单的字符单元模型,其中每个字形都适合具有给定高度的框。组合标记可以在基本字符的上方,下方或内部显示
因此,只要渲染软件符合Unicode渲染模型,您就可以轻松构造一个字符序列,该字符序列由任意长度的基本字符和"上面的组合"标记组成,以达到任何所需的视觉高度。这样的序列当然没有任何意义,甚至猴子也可以产生它(例如,给定具有适当驱动程序的键盘)。
您可以混合"在上方组合"和"在下方组合"标记。
问题中的示例文本以以下内容开头:
-
拉丁文大写字母H-
-
组合拉丁文小写字母T-
-
组合希腊克朗斯-
-
上方合并逗号-
-
上面结合点-
Zalgo文本之所以有效是因为结合了字符。这些是特殊字符,允许修改之前出现的字符。
要么
y + = y实际上是
1 | y + = y |
由于您可以将它们一个接一个地堆叠,因此可以产生以下内容:
?
实际上是:
1 | y |
将东西放在下面也是如此:
?
实际上是:
1 | y |
在Unicode中,将欧洲语言的变音符号和国际音标结合起来的主要步骤是U + 0300–U + 036F。
在这里了解更多
要生成一个组合变音标记的列表,您可以使用以下脚本(因为链接不断消失)
1 | for(var i=768; i<879; i++){console.log(new DOMParser().parseFromString("&#"+i+";","text/html").documentElement.textContent +" "+"&#"+i+";");} |
还检查一下
MV