不可见字符检测器

将任意文本粘贴后,检测器会报告其中包含的所有不可见字符:零宽空格、方向标记、BOM标识符、软连字符、非折行空格,以及那些看似空白却会干扰搜索、差异分析及复制粘贴功能的Unicode控制码点组合。每次识别结果均附带对应的代码点(U+200B)、官方Unicode名称及其在字符串中的位置信息,从而帮助您精准定位潜在错误所在位置以便进行修复。

如何检测隐藏字符

  1. 1

    粘贴文本

    输入可疑字符串,一段代码片段、复制的消息或配置值。

  2. 2

    运行扫描

    该工具会遍历所有代码点,并标记出符合不可见/格式字符列表的代码点。

  3. 3

    审阅报告

    每个命中项均显示其位置(以1为索引)、`U+HHHH`格式下的代码点以及Unicode名称(零宽空格、BOM等)。

  4. 4

    清理文本

    使用“替换”操作移除或显示隐藏字符,随后将清理后的版本重新粘贴。

不可见字符及其来源

这些字符的存在都有其合理用途(如文本排版、书写方向或字符组合)。当它们脱离设计初衷,出现在代码、配置文件、搜索查询或用户名中时,就会成为问题。

检测器需要识别的字符

代码点 名称 通常潜入的位置
U+200B 零宽度空格 富文本编辑器、文字处理软件
U+200C 零宽度非连接符 波斯语、印地语排版
U+200D 零宽度连接符 表情符号序列、印度系文字(Indic)
U+200E 左到右标记 同时包含LTR和RTL脚本的文本
U+200F 从右向左标记 相同
U+202A..E 嵌入/覆盖 相同;有时被恶意使用(特洛伊木马来源)
U+2028 行分隔符 从Word复制,会破坏 JSON 编码
U+2029 段落分隔符 相同
U+FEFF 字节顺序标记 在记事本中保存为 UTF-8 带 BOM 的文件
U+00A0 不断开空格 来自 Word 的排版空白
U+00AD 软连字符 富文本中的连字符使用提示

隐藏字符错误的常见症状

  • “本应”相等的字符串比较结果却不相等。 将这些值复制到本工具中并检查字节数。
  • 肉眼看起来能匹配、但在代码中却失效的正则表达式。 通常是伪装成空格的 U+00A0
  • JSON 解析器在处理粘贴的载荷时崩溃。 通常是开头的 BOM,或字符串字面量中的 U+2028,JavaScript 在 JSON 中会拒绝该字符。
  • SEO 标题长度不正确。 零宽空格会在没有任何可见变化的情况下让标题超出长度限制。

特洛伊木马的来源角度

双向覆盖字符(U+202EU+2066……U+2069)可使源代码在编译时按一种顺序执行,而在实际运行时却呈现另一种顺序,这属于“特洛伊源码”攻击类型。若需审阅来自不可信贡献者的代码,请在合并前使用该检测工具分析其代码差异。

常见问题

记事本及部分旧版 Windows 工具默认使用“UTF-8 带 BOM”格式。该BOM文件(U+FEFF)适用于Windows应用程序,但会破坏许多shell脚本流程、PHP文件(其内容会在<?php标签前作为输出输出)以及 JSON 解析器。

它在屏幕上看起来像一个普通的字符空间,但实际行为却有所不同:不允许换行,并且在所有语言中均不被大多数 \s regex 变体所支持。这类字符常出现在从富文本源复制的文件路径、电子邮件地址及用户名中。

并非总是如此。在阿拉伯文、波斯文或天城体文本中,零宽度连接符和非连接符在语义上是必需的;而在代码、配置文件及大多数英文文本中,则可随意省略;对于自然语言内容,则应在省略前使用检测工具进行检查。

不,该分析仅针对当前请求执行,响应生成后不会存储或记录您粘贴的任何内容。

相关工具

此工具还提供其他语言版本