Copiar um título ou uma frase curta do Word ou do Google Docs e colar num campo de formulário tem uma armadilha comum: o processador de texto costuma inserir um espaço inquebrável (U+00A0, o mesmo caractere da entidade HTML ) no lugar de um espaço normal, exatamente para impedir que aquele ponto quebre no fim de uma linha.
Por que isso causa bugs estranhos
O sintoma mais clássico é uma comparação de strings que retorna inesperadamente "não iguais", mesmo que o texto na tela pareça idêntico. A causa costuma ser que uma string contém um espaço normal e a outra contém esse espaço inquebrável importado do Word. Visualmente não há diferença; para o computador, há — e é exatamente o tipo de bug que passa despercebido numa revisão de código porque não aparece no diff.
Trim
Trim remove caracteres de espaço em branco do início e do fim de uma string, deixando intacto o conteúdo no meio. É uma operação padrão de limpeza de entrada do usuário — um espaço extra acidental no início de um campo de formulário não deveria afetar a comparação ou validação de um valor.
Colapsando espaços em branco
Outra operação comum é substituir vários caracteres de espaço em branco consecutivos por um só. Isso é útil para texto copiado de uma fonte formatada (um PDF ou uma tabela, por exemplo), onde podem aparecer espaços duplos ou tabulações acidentais no lugar de um único espaço.
Para que serve
- Diagnosticar por que a comparação de duas strings aparentemente idênticas falha.
- Limpar de caracteres invisíveis e supérfluos um texto copiado de um processador de texto ou página web.
- Normalizar a entrada do usuário antes de salvá-la num banco de dados.
Caracteres de largura zero
Além dos caracteres de espaço visíveis, existem caracteres de largura zero (zero-width space, zero-width joiner) — eles não ocupam nenhum espaço na tela, mas estão presentes no texto como caracteres separados. Esses caracteres às vezes acabam no texto ao copiar de certos sites ou mensageiros e podem quebrar de forma imperceptível a comparação de strings ou a busca, permanecendo totalmente invisíveis mesmo num editor de texto.