协慌网

登录 贡献 社区

Zalgo 文字如何工作?

我在各个论坛上都看到过奇怪的格式化文本 Zalgo,如下所示。看起来很烦人,但它确实使我感到困扰,因为它破坏了我对角色应该是什么样的观念。我的理解是,角色应该在一条线上水平移动并停留在某个 “容器” 内。显然,Zalgo 文本是垂直移动的,似乎不受任何空间限制。

这是 Unicode 中的错误 / 缺陷 / 漏洞利用 / 黑客吗?这些单个字符是否具有怪异的属性? “什么” 在这里发生?


̡̫̤̤̣͉̤ͭ̓̓̇͗̎̀ơ̯̗̱̘̮͒̄̀̈ͤ̀͡ ͓̲͙͖̥͉̹͋ͬ ̳̘̿̃̔̏ͣ͂̉̕ŏ̖̙͋ͤ ̳̘̿̃̔̏ͣ͂̉̕ŏ̖̙͋ͤ ̳̘̿̃̔̏ͣ͂̉̕ŏ̖̙͙͔̺͇̗̱̟̹͈̺̹͋ͤ͗̓̿̆̆̆̆̆̋̅ͯ͟͜ĺ̡̘̹̻̩̩͎̭̤͍͇̰͋̄͗ͭ̃͗ͮ̐͘ ͎̭̤͍͇̰̄͗ͭ̃͗ͮ̐ ͎̭̤͍͇̰̄͗ͭ̃͗ͮ̐ ͎̭̤͍͇̰̄͗ͭ̃͗ͮ̐ ͎̭̤͍͇̰̄͗ͭ̃͗ͮ̐ ͎̭̤͍͇̰̄͗ͭ̃͗ͮ̐ ͎̭̤͍͇̰̄͗ͭ̃͗ͮ̐ ͎̭̤͍͇̰̄͗ͭ̃͗ͮ̐ ͎̭̤͍͇̰̄͗ͭ̃͗ͮ̐


答案

文本使用组合字符,也称为组合标记。请参阅Unicode 标准(PDF)中的组合字符 2.11 节。

在 Unicode 中,字符渲染不使用简单的字符单元模型,在该模型中,每个字形都适合于具有给定高度的框。组合标记可以在基本字符的上方,下方或内部进行渲染

因此,假设渲染软件符合 Unicode 渲染模型,则可以轻松构造一个字符序列,该字符序列由任意长度的基本字符和 “上面的组合” 标记组成,以达到任何所需的视觉高度。这样的序列当然没有任何意义,甚至猴子也可以产生它(例如,给键盘一个合适的驱动器)。

您可以混合 “在上方组合” 和 “在下方组合” 标记。

问题中的示例文本以以下内容开头:

Zalgo 文本之所以有效,是因为结合了字符。这些是特殊字符,允许修改之前出现的字符。

在此处输入图片说明

或者

y +̆=y̆实际上是

y + ̆ = y̆

由于您可以将它们一个接一个地堆叠,因此可以产生以下内容:


̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆

实际上是:

y̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆

将内容放在下面也是如此:


̰̰̰̰̰̰̰̰̰̰̰̰̰̰̰̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆



实际上是:

y̰̰̰̰̰̰̰̰̰̰̰̰̰̰̰̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆

在 Unicode 中,将欧洲语言的变音符号和国际音标结合起来的主要步骤是 U + 0300–U + 036F。

在这里更多关于它的信息

要产生一个组合变音标记的列表,您可以使用以下脚本(因为链接不断消失)

for(var i=768; i<879; i++){console.log(new DOMParser().parseFromString("&#"+i+";", "text/html").documentElement.textContent +"  "+"&#"+i+";");}

还要检查一下



Mͣͭͣ̾Vͣͥͭ͛ͤͮͥͨͥͧ̾