Detector de Caracteres Invisíveis

Cole qualquer texto e o detector reporta cada caractere invisível que ele contém: espaços de largura zero, marcas direcionais, BOMs, hífens suaves, espaços não separáveis e o cluster de pontos de código de controle Unicode que parecem ar vazio, mas quebram busca, diff e copiar-colar. Cada ocorrência vem com seu ponto de código (U+200B), seu nome Unicode oficial e sua posição na string, para que você possa localizar onde um bug misterioso está escondido antes de removê-lo.

Como detectar caracteres invisíveis

  1. 1

    Cole o texto

    Insira a string suspeita, um trecho de código, uma mensagem copiada, um valor de configuração.

  2. 2

    Execute a varredura

    A ferramenta percorre cada ponto de código e sinaliza qualquer um que corresponda à lista de caracteres invisíveis/formato.

  3. 3

    Revise o relatório

    Cada ocorrência mostra sua posição (indexada em 1), seu ponto de código na forma `U+HHHH` e seu nome Unicode (Espaço de Largura Zero, BOM, etc.).

  4. 4

    Limpe o texto

    Use a ação de substituição para remover ou visualizar os caracteres ocultos, e então cole a versão sanitizada de volta.

Caracteres invisíveis e de onde eles vêm

Esses caracteres existem por razões legítimas (layout de texto, direção de script, caracteres combinados). Eles se tornam bugs quando vazam do contexto para o qual foram projetados e entram em código, configuração, consultas de busca ou nomes de usuário.

Caracteres que o detector procura

Ponto de Código Nome Onde geralmente se infiltra
U+200B Espaço de Largura Zero Editores de texto enriquecido, processadores de texto
U+200C Não-Conector de Largura Zero Tipografia persa, hindi
U+200D Conector de Largura Zero Sequências de emoji, escritas índicas
U+200E Marca da Esquerda para a Direita Texto contendo scripts LTR e RTL
U+200F Marca da Direita para a Esquerda O mesmo
U+202A..E Incorporação / substituição O mesmo; às vezes usado maliciosamente (Trojan Source)
U+2028 Separador de Linha Copiado do Word, quebra codificadores JSON
U+2029 Separador de Parágrafo O mesmo
U+FEFF Marca de Ordem de Bytes Arquivos salvos como UTF-8-com-BOM no Notepad
U+00A0 Espaço Não Quebrável Espaço tipográfico do Word
U+00AD Hífen Suave Dicas de hifenização em texto rico

Sintomas comuns de um bug de caractere oculto

  • Uma comparação de string que “deveria” ser igual não é. Copie os valores para esta ferramenta e verifique as contagens de bytes.
  • Uma regex que parece corresponder a olho, mas falha no código. Muitas vezes um U+00A0 disfarçado como um espaço.
  • Um parser JSON falha em um payload colado. Geralmente um BOM no início, ou U+2028 em um literal de string que o JavaScript rejeita dentro do JSON.
  • O título SEO tem o comprimento errado. Um espaço de largura zero ultrapassa um limite sem nenhuma mudança visível.

A perspectiva do Trojan Source

Caracteres de sobreposição bidirecional (U+202E, U+2066..U+2069) podem fazer o código-fonte ser renderizado em uma ordem enquanto é compilado em outra, a classe de ataques “Trojan Source”. Se você revisar o código de colaboradores não confiáveis, execute suas diferenças através deste detector antes de mesclar.

Perguntas frequentes

O Notepad e algumas ferramentas mais antigas do Windows usam “UTF-8 com BOM” por padrão. O BOM (U+FEFF) é aceitável para aplicativos do Windows, mas quebra muitos pipelines de shell, arquivos PHP (o BOM é ecoado como saída antes da tag <?php) e parsers JSON.

Ele parece um espaço regular na tela, mas se comporta de maneira diferente: não permite uma quebra de linha e não é correspondido pela maioria das variantes de regex \s em todas as linguagens. Muitas vezes acaba dentro de caminhos de arquivos, endereços de e-mail e nomes de usuário copiados de fontes de texto rico.

Nem sempre. Em textos árabes, persas ou devanagari, o conector e o não-conector de largura zero são semanticamente necessários. Em código, configuração e na maioria dos textos em inglês, remova livremente. Em conteúdo de linguagem natural, use o detector para inspecionar antes de remover.

Não, a análise é executada para a solicitação atual e nada que você cole é armazenado ou registrado após a resposta ser gerada.

Ferramentas relacionadas

Ferramenta disponível em outros idiomas