隐形文字

文字工具

零宽空格生成器

复制零宽空格(U+200B)。一个零宽格式字符,告诉浏览器和文本引擎一行可以在哪里换行,不显示连字符也不占空间。

实时生成器
生成零宽空格
选择要复制的 U+200B 字符数量
粗体 输出

零宽空格的用途

零宽空格(ZWSP,U+200B)是一个没有可见字形、前进宽度为零的 Unicode 格式字符。它的作用是告诉渲染引擎一行允许在哪里断开。HTML 的 <wbr> 元素行为完全相同。浏览器和文字处理软件在换行长字符串时会参考这些断点机会。一个长 URL 在每个斜杠后放上 U+200B,就会在这些位置整齐换行,而不是溢出容器。这个字符是为泰文、老挝文、高棉文这类词间不加空格的文字设计的。在词之间插入 U+200B,渲染器就能换行。在拉丁字母文本里它有另一套用途:打断 Twitter @提及和 #话题标签让它们不自动生成链接,拆分德语长复合词,以及悄悄在长标识符内部标记断点。

U+200B 真正有用的地方

长 URL 和字符串换行

在长 URL 的每个斜杠或句点后放 U+200B,浏览器会在这些位置换行而不是撑破布局。断点处不出现连字符。

防止帖子里的自动链接

Twitter 等平台会把 @用户名和 #话题标签转成链接。在符号和文字之间插一个零宽空格,能打断匹配又不改变阅读效果。

CSS 中的断词控制

把 U+200B 和 word-break: keep-all 搭配,可以在 CJK 文本里标记允许换行的位置,同时压制其他地方的断行。CSS Text 规范把这列为预期模式。

文本水印

在文档的选定位置插入 U+200B,你就得到一个能扛住复制粘贴、读者却看不见的指纹。每个接收者拿到不同的模式。

U+200B 在边界处如何表现

U+200B 是格式字符(通用类别 Cf),不是空格。这个区别很重要。它不是空白,所以 JavaScript 的 trim() 不会移除它。但它又不可见,所以对人来说看起来一样的字符串,字节层面可能不同。安全研究人员利用这个性质在标识符里藏载荷:两个都渲染为「admin」的字符串,如果其中一个含 U+200B,对数据库来说就是不同的。Trojan Source 披露(CVE-2021-42574 和 CVE-2021-42694)记录了不可见 Unicode 字符如何让源代码的编译结果与读到的不一样。在渲染方面,U+200B 在浏览器里被广泛支持,但会被清理输入的聊天应用剥离。WhatsApp 和 TikTok 从消息和简介里移除它,Discord 则在不同字段里表现不一。平台剥离它时,备用方案通常是 U+2800(盲文空白)这类可见却空白的字符。

使用 U+200B 前的注意事项

  • U+200B 标记换行机会,不强制换行。是否换行仍由渲染器根据可用宽度决定。
  • 断点处绝不显示连字符。想要换行时出现可见连字符,改用软连字符(U+00AD)。
  • JavaScript 的 trim() 不移除 U+200B,因为它不归类为空白。需要剥离时,用针对 U+200B 的正则。
  • 要禁止而非允许换行,用 U+2060(字连接符)。它是 U+200B 的反面,也是已弃用的 U+FEFF 的现代替代品。
  • 清理输入的聊天应用常剥离 U+200B。要发空白消息或用户名,换用 U+2800 或 U+3164。
  • 把 U+200B 放进话题标签或 @提及会破坏链接。想提到 CSS 的 @media 规则又不触发个人资料链接时很有用。

零宽空格在哪里可用

U+200B 在所有现代浏览器和多数文字处理软件里都受支持,作为换行机会发挥作用。CSS Text Module 规范明确把它和 <wbr> 元素并列,作为标记换行点的方式。在聊天应用和社交媒体里,支持参差不齐。WhatsApp、Instagram、Discord 在某些字段接受它,在另一些字段剥离它。TikTok 从简介里移除它。游戏平台很少在用户名里接受它。经验法则:在浏览器或文本编辑器里,U+200B 靠谱;在聊天应用或社交输入里,先测试,并备好 U+2800 或 U+3164 作为替代。

关于 U+200B 的常见问题

零宽空格到底做什么?

它标记一行允许断开的位置。字符本身不可见也不占宽度,但当浏览器或文本引擎决定长行在哪里换行时,会把 U+200B 当作可接受的断点,不插入连字符。

U+200B 和普通空格有什么区别?

普通空格(U+0020)有可见宽度,是空白。U+200B 宽度为零,是格式字符而非空白,绝不插入可见间隙。它唯一的功用是在词或字符串内部选定位置允许换行。

如何复制零宽空格字符?

在上面设置数量,点击复制。字符进入剪贴板时没有任何可见提示,这是正常的。粘贴到测试字段确认它们到位。

零宽空格能被检测到吗?

能。它有固定码点(U+200B),所以任何检查 Unicode 的工具都能找到它。针对该码点的搜索会定位每一个实例。它对人是不可见的,对软件不是。

为什么我的零宽空格被剥离了?

平台的输入清理程序移除了它。聊天应用和社交平台常过滤零宽格式字符以防止滥用。换用盲文空白(U+2800)或谚文填充(U+3164),它们被归类为符号和字母,更常躲过过滤。

U+200B 和 HTML <wbr> 标签一样吗?

实际上一样。MDN 文档指出 <wbr> 的行为等同于 U+200B 码点。两者都标记换行机会,没有可见字形也没有连字符。HTML 标记里用 <wbr>,纯文本里用 U+200B。