长 URL 和字符串换行
在长 URL 的每个斜杠或句点后放 U+200B,浏览器会在这些位置换行而不是撑破布局。断点处不出现连字符。
文字工具
复制零宽空格(U+200B)。一个零宽格式字符,告诉浏览器和文本引擎一行可以在哪里换行,不显示连字符也不占空间。
零宽空格(ZWSP,U+200B)是一个没有可见字形、前进宽度为零的 Unicode 格式字符。它的作用是告诉渲染引擎一行允许在哪里断开。HTML 的 <wbr> 元素行为完全相同。浏览器和文字处理软件在换行长字符串时会参考这些断点机会。一个长 URL 在每个斜杠后放上 U+200B,就会在这些位置整齐换行,而不是溢出容器。这个字符是为泰文、老挝文、高棉文这类词间不加空格的文字设计的。在词之间插入 U+200B,渲染器就能换行。在拉丁字母文本里它有另一套用途:打断 Twitter @提及和 #话题标签让它们不自动生成链接,拆分德语长复合词,以及悄悄在长标识符内部标记断点。
在长 URL 的每个斜杠或句点后放 U+200B,浏览器会在这些位置换行而不是撑破布局。断点处不出现连字符。
Twitter 等平台会把 @用户名和 #话题标签转成链接。在符号和文字之间插一个零宽空格,能打断匹配又不改变阅读效果。
把 U+200B 和 word-break: keep-all 搭配,可以在 CJK 文本里标记允许换行的位置,同时压制其他地方的断行。CSS Text 规范把这列为预期模式。
在文档的选定位置插入 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 在所有现代浏览器和多数文字处理软件里都受支持,作为换行机会发挥作用。CSS Text Module 规范明确把它和 <wbr> 元素并列,作为标记换行点的方式。在聊天应用和社交媒体里,支持参差不齐。WhatsApp、Instagram、Discord 在某些字段接受它,在另一些字段剥离它。TikTok 从简介里移除它。游戏平台很少在用户名里接受它。经验法则:在浏览器或文本编辑器里,U+200B 靠谱;在聊天应用或社交输入里,先测试,并备好 U+2800 或 U+3164 作为替代。
它标记一行允许断开的位置。字符本身不可见也不占宽度,但当浏览器或文本引擎决定长行在哪里换行时,会把 U+200B 当作可接受的断点,不插入连字符。
普通空格(U+0020)有可见宽度,是空白。U+200B 宽度为零,是格式字符而非空白,绝不插入可见间隙。它唯一的功用是在词或字符串内部选定位置允许换行。
在上面设置数量,点击复制。字符进入剪贴板时没有任何可见提示,这是正常的。粘贴到测试字段确认它们到位。
能。它有固定码点(U+200B),所以任何检查 Unicode 的工具都能找到它。针对该码点的搜索会定位每一个实例。它对人是不可见的,对软件不是。
平台的输入清理程序移除了它。聊天应用和社交平台常过滤零宽格式字符以防止滥用。换用盲文空白(U+2800)或谚文填充(U+3164),它们被归类为符号和字母,更常躲过过滤。
实际上一样。MDN 文档指出 <wbr> 的行为等同于 U+200B 码点。两者都标记换行机会,没有可见字形也没有连字符。HTML 标记里用 <wbr>,纯文本里用 U+200B。