【问题标题】:How does Zalgo text work?Zalgo 文本如何工作?
【发布时间】:2011-09-28 14:53:32
【问题描述】:

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

这是 Unicode 中的错误/缺陷/利用/黑客攻击吗?这些单独的角色是否具有奇怪的属性?这里发生了什么?


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


【问题讨论】:

标签: html unicode zalgo


【解决方案1】:

文本使用组合字符,也称为组合标记。请参阅Combining Characters in the Unicode Standard (PDF) 的第 2.11 节。

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

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

而且你可以混合使用“combining above”和“combining below”标记。

问题中的示例文本以:

【讨论】:

  • Unicode 可以做到这一点,因为它故意符合“现实世界中的字符使用”——然后期望软件符合 Unicode。这就是为什么我们有例如U+1F4A9
  • 只是补充一下,下面是上面使用的组合字符列表,或者通过文本生成“Zalgo文本”:zalgotextgenerator.com/unicode
【解决方案2】:

Zalgo 文本的工作原理是组合字符。这些是允许修改前面的字符的特殊字符。

y + ̆ = y̆ 实际上是

y + ̆ = y̆

由于您可以将它们一个一个堆叠在一起,因此您可以生成以下内容:


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

实际上是:

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

在下面放东西也是如此:


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



实际上是:

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

在 Unicode 中,组合欧洲语言和国际音标的变音符号的主要块是 U+0300–U+036F。

More about it here

要生成一个组合变音符号的列表,您可以使用以下脚本(因为链接不断死亡)

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

也检查一下



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

【讨论】:

  • 你会怎么输入?
  • @Aequitas 如果您询问ALT 代码,那么您不能这样做,您只需将y̆̆ 粘贴到“纯”html 的位置,浏览器就会做到这一点......跨度>
  • @barbsan 嗨,感谢您告诉我,我已将其替换为生成它们的脚本。
  • 我想知道你为什么选择这个带有波浪线的特殊 Y 示例。它实际上在俄语中有一些含义,不确定您是否熟悉。
  • 这只是理查德的昵称。
猜你喜欢
  • 2012-05-03
  • 2015-01-11
  • 2015-12-31
  • 2013-05-03
  • 1970-01-01
  • 2019-04-18
相关资源
最近更新 更多