关于html:Zalgo文字如何工作?

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文本之所以有效是因为结合了字符。这些是特殊字符,允许修改之前出现的字符。

enter image description here

要么

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