html - Zalgo 文本如何工作?

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

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


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


最佳答案

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

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

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

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

问题中的示例文本以:

  • LATIN CAPITAL LETTER H - H
  • COMBINING LATIN SMALL LETTER T - ͭ
  • COMBINING GREEK KORONIS - ̓
  • COMBINING COMMA ABOVE - ̓
  • COMBINING DOT ABOVE - ̇

https://stackoverflow.com/questions/6579844/

相关文章:

javascript - 如何在页面加载后执行 JavaScript?

html - 为输入类型 ="file"按钮设置样式

html - 拉伸(stretch)和缩放 CSS 背景

html - 从 IFrame 中删除边框

javascript - 如何检测 JavaScript 是否被禁用?

html - 使用 CSS 按比例调整图像大小?

html - 默认情况下如何选择单选按钮?

html - HTML中id和name属性的区别

html - 如何在 pre 标签中换行?

html - 我可以使用 :before or :after pseudo-element on a