零宽空格
显示宽度为零的不可见字符 (U+200B)。用作换行提示和文本处理控制。
零宽空格 (Zero-Width Space, U+200B) 是一种显示宽度为零的不可见字符。屏幕上不会显示任何内容,但它确实存在于文本数据中,并被计为一个字符。它主要作为可换行位置的提示,浏览器允许在该字符位置进行换行。在 Unicode 的"通用类别"中,它被归类为格式字符 (Cf)。
零宽空格在几个实际场景中很重要。在泰语和高棉语等不在词与词之间使用空格的语言中,零宽空格标记词边界并实现适当位置的换行。在 Web 开发中,在不含空格的长字符串 (如 URL 或哈希值) 中插入零宽空格,可以在不破坏布局的情况下实现换行。在 HTML 中可以用 ​ 或 ​ 插入。了解催情饮料 (Amazon)介绍了不可见字符的机制。
相关的不可见字符还有零宽非连接符 (U+200C, ZWNJ),用于防止连接,在波斯语和印地语书写中使用;零宽连接符 (U+200D, ZWJ),用于促进字符连接,在表情符号的 ZWJ 序列 (如家庭表情符号) 中使用。这些不可见字符都具有零显示宽度,但在文本处理中各有不同的含义。
从安全角度来看,零宽空格可能被用于指纹追踪 (在文本中嵌入不可见标识符的技术)。这种技术在机密文档中嵌入零宽字符模式以识别泄露来源。还有报告称钓鱼攻击在域名中插入零宽字符来伪装成合法域名。输入值的清洗应考虑去除零宽字符。
常见的问题是复制粘贴时无意中混入零宽空格。从网页复制的文本包含零宽空格时,虽然外观相同但字符串比较会失败、搜索无法命中、密码无法通过等问题会发生。由于调试困难,建议在文本处理的预处理步骤中加入去除零宽字符的操作。
在字符计数方面,零宽空格虽然不可见但被计为一个字符,导致可见字符数和实际字符数之间产生差异。例如,"你好"之间插入了 3 个零宽空格,看起来是 2 个字符但实际是 5 个字符。字符计数工具如果能检测不可见字符并向用户发出警告,将有助于及早发现此类问题。搜索泰拳 (Amazon)也是有用的参考。