Hyaika Blog

Penguin is all you need

设计

那个叫「和」的符号:& 如何从连词,变成了全世界的分隔符

那个叫「和」的符号:& 如何从连词,变成了全世界的分隔符

那个叫「和」的符号:& 如何从连词,变成了全世界的分隔符

目录

  • 一个字符的自我指涉悖论
  • 庞贝墙上的涂鸦:& 出生在公元 79 年
  • 「and per se and」:一个没有自己名字的字母
  • ASCII 0x26:被键盘留下的第 27 个字母
  • HTML:& 成了转义符,然后被困住了
  • URL:& 从「和」变成了「分开」
  • 我给 & 数了一遍家谱
  • 连接词的分隔符时代

一个字符的自我指涉悖论

在 HTML 里打一个 &,浏览器会把它吞掉。

不是消失,是「转义」——& 是 HTML 里所有特殊字符的开头:&lt; 是 <,&gt; 是 >,&nbsp; 是不换行空格。如果你想在网页上显示一个真的 &,你得写 &amp;。

一个字符,为了显示它自己,必须先引用它自己。这大概是排版史上唯一一个「需要绕过自己才能出现」的符号。

而更拧巴的是:这个字符的本职工作,是「和」。


庞贝墙上的涂鸦:& 出生在公元 79 年

& 不是被发明的,是被写出来的。

拉丁语里表示「和」的词是 et。公元 1 世纪,罗马抄写员为了省墨,把 e 和 t 连起来写——e 的竖线往上伸,t 的横线往右甩,两个字母融成一个,像两个人在握手。

现存最早的 &,刻在庞贝古城的墙上。公元 79 年维苏威火山把整座城埋进火山灰,也把墙上那句涂鸦里的 & 冻在了时间里。两千年后考古学家把它挖出来,那个符号和今天键盘上的 & 几乎一模一样。

罗马人还有一套更快的速记系统,叫 Tironian notes(蒂罗速记),里面「和」写作 ⁊,像个小写的 7 尾巴翘起来。这个 ⁊ 在爱尔兰语里活到了今天——现代爱尔兰语的「和」(agus)至今可以写作 ⁊,Unicode 里它有个正式名字:TIRONIAN SIGN ET。

所以 & 家族一开始就有两个分支:一个是 et 的合字(&),一个是速记的 ⁊。它们都是「和」,只是笔迹不同。


「and per se and」:一个没有自己名字的字母

& 在英语里有个奇怪的名字:ampersand。

这个词是 "and per se and" 的连读。19 世纪的英语字母表歌,结尾不是 Z,而是:

X, Y, Z, and per se and.

「per se」是拉丁语「本身」的意思。整句意思是:X,Y,Z,还有读作 and 的那个字符本身。孩子们一遍遍唱,唱到最后,"and per se and" 连读成了 "ampersand"。

注意这个细节:& 这个字符没有自己的读音,它读作 and——它的读音就是它表示的那个词。所以当英国人在 18-19 世纪把字母表数成 27 个字母时,第 27 个「字母」是一个读作 and 的符号。

一个字符,没有名字,读作一个词,还挤进了字母表。这事儿放在今天,等于有人建议把 ❤️ 加进 ABC。


ASCII 0x26:被键盘留下的第 27 个字母

1963 年,ASCII 标准把 & 钉在了 0x26 的位置——第 6 个可打印字符,排在 % 后面、' 前面。

ASCII 的诞生是一场大扫除:电报码、打孔卡、各家厂商的私货编码,全被塞进 95 个可打印字符。很多花哨的符号被踢出去了,& 留了下来——因为它是英语里唯一一个「表示 and 的专用字符」,报纸标题、公司名(AT&T)、商标缩写都离不开它。

但 & 留在键盘上的命运,比它自己预料的要忙得多。


HTML:& 成了转义符,然后被困住了

1990 年代,Tim Berners-Lee 发明 HTML 时,需要一个「转义字符」——告诉浏览器「后面这几个字符别按字面理解,它是特殊代码」。他选了 &。

为什么是 &?因为 & 在英语文本里出现的频率刚好:足够常见(大家认识),又足够罕见(不会天天误触发)。选 # 或 @ 都太常见,选 ^ 又太少见。

于是 & 从「连词」变成了「开关」:& + 字母 + ; = 一个特殊字符。它不再表示「和」,而是表示「下一个字符是别的意思」。

这就是自我指涉的起点。HTML 里想写「AT&T」,必须打 AT&amp;T。浏览器渲染时,& 先被当成转义符吃掉,amp; 再吐出一个 &——& 成了唯一一个「为了显示自己必须先背叛自己」的字符。

& 的 Unicode 家族:10 个成员,一条语法化主线


URL:& 从「和」变成了「分开」

如果说 HTML 里 & 是「转义开关」,那 URL 里 & 直接换了一份新工作:分隔符。

?name=taobao&type=A——第一个参数是 name,& 之后是第二个参数 type。在这里 & 不再表示「和」(A 和 B 在一起),而是表示「A 结束了,B 开始了」——一个纯正的分隔语义。

这是 & 最彻底的翻转:它从「把两个东西连起来」,变成了「把两个东西隔开」。同一个字符,一个语义是融合,一个语义是切分。

1998 年 RFC 2396 正式把 & 定为 query 分隔符时,没人想到二十多年后,全世界每个网页、每个 API 调用、每个搜索引擎的 URL 里,& 都以「分开」的身份高频出现——它作为「和」的本职,反而没人记得了。

我在自己的博客里翻了 537 篇文章的正文,45 篇里躺着 &,形态几乎全是 URL 参数分隔符:resolve?name=www.taobao.com&type=A、wiki.cgi?action=edit&id=某页面&text=...——没有一处是拿它当「和」用的。


我给 & 数了一遍家谱

Unicode 里名字含 AMPERSAND 或 TIRONIAN ET 的字符,我全扫了一遍,10 个:

  • U+204A ⁊ — TIRONIAN SIGN ET(罗马速记祖先,爱尔兰语还在用)
  • U+0026 & — AMPERSAND(ASCII 0x26 本体)
  • U+214B ⅋ — TURNED AMPERSAND(& 转 180°,线性逻辑里的「par」——并行析取)
  • U+2E52 ⹒ — TIRONIAN SIGN CAPITAL ET(大写的 ⁊)
  • U+FF06 & — FULLWIDTH AMPERSAND(全角,CJK 排版用)
  • U+06FD ۽ — ARABIC SIGN SINDHI AMPERSAND(信德语借去用)
  • U+FE60 ﹠、U+1F674 🙴、U+1F675 🙵 — 小型/花体装饰变体
  • U+E0026 — TAG AMPERSAND(标签字符)

最有意思的是 ⅋:线性逻辑里它表示「平行」——A ⅋ B 是两个进程并行,而不是「A 且 B」。一个把 & 倒过来当新符号用的逻辑学家,等于承认了 & 的「连接」语义需要被倒转才能表达「并行」——连它的翻转体都在干分隔的活。

服务器实测:博客源码(.vue/.ts/.js/.py/.css)里 && 运算符出现 1065 次,& 总计 2652 次。C 语言里 && 是短路与(if (a && b)——两边都为真才继续),& 是位与;C++ 里 & 是引用;Go 里 & 是取地址;Shell 里 cmd & 是把命令丢到后台。每一个用法都跟「和」没关系了——它们是「并且」「并行」「引用」「地址」。


连接词的分隔符时代

中文里,& 没有正式名字。有人叫它「and 符号」,有人误叫「艾特」(那是 @),输入法里它叫「和号」。

中文其实不需要 & 的合字——合字是拼音文字的特权:字母粘在一起省空间。汉字是方块字,「和」字笔画已经够省,没有哪个抄写员会想给「和」画个连笔。所以中文五千年没有 &,拉丁世界两千年有一个。

但中文用户照样每天用 &——在 URL 里,在代码里,在 Excel 的 =A1&B1 拼接里。我们不需要它表示「和」,我们只需要它表示「下一个」。

这就是 & 的语法化:一个连词,在两千年的职业生涯里,从「把 A 和 B 放在一起」,一路变成了「A 和 B 之间划条线」。

庞贝墙上的 & 还在握手。键盘上的 & 已经学会切分了。

它大概是世界上唯一一个——为了显示自己,必须先引用自己的符号。

分享:

评论(0)

暂无评论,来写第一条吧~

发表评论