Zalgo文本如何工作?

我在各种论坛上看到过奇怪的格式化文本,叫做Zalgo,就像下面这样。看起来有点烦人,但它真的让我很困扰,因为它破坏了我对角色应该是什么的概念。我的理解是,一个角色应该水平移动穿过一条线,并停留在某个“容器”内。显然,Zalgo文本是垂直移动的,似乎不受任何空间的限制。

这是Unicode中的bug /flaw/exploit/hack吗?这些单个字符是否具有奇怪的属性?这里发生了“什么”?


H̡̛̫̤̤̣͉̤̯̗̱̘̮ͭ̓̓̇͗̎̀͒̄̀̈ͤ̀͡w͓̲͙͖̥͉̹͋ͬ̊ͦ̂̀̚ ͎͉͖̌ͯͅͅd̳̘̿̃̔̏ͣ͂̉̕ŏ̖̙͋ͤ̊͗̓͟͜e͈͕̯̮̙̣͓͌ͭ̍̐̃͒s͙͔̺͇̗̱̿̊̇͞ ̸̤͓̞̱̫ͩͩ͑̋̀ͮͥͦ̊Z̆̊͊҉҉̨̠̱̦̩͕̟̹͈̺̹̋̅ͯĺ̡̘̹̻̩̩͋͘g o̢̖͇̬͍͇͓̔͋͊̓ ̢͈͙͂ͣ̏̿͐͂ͯ͠t̛͓̖̻̲ͤ̈ͣ͝e͋̄ͬ̽͜҉͚̭͇ͅx͎̬̠͇̌ͤ̓̂̓͐͐́͋͡ț̗̹̝̄̌̀ͧͩ̕͢ ̮̗̩̳̱̾w͎̭̤͍͇̰̄͗ͭ̃͗ͮ̐o̢̯̻̰̼͕̾ͣͬ̽̔̍͟ͅr̢̪͙͍̠̀ͅǩ̵̶̗̮̮ͪ́?̙͉̥̬͙̟̮͕ͤ̌͗ͩ̕͡


210939 次浏览

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

在Unicode中,字符呈现不使用简单的字符单元模型,其中每个字形都适合给定高度的框。组合标记可以在基字符的上方、下方或内部呈现

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

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

问题中的示例文本开头为:

Zalgo文本由于组合字符而起作用。这些是允许修改前面的字符的特殊字符。

输入图片描述

y+=y实际上是

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+";");}

Also check em out



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