Copiare un titolo o una frase breve da Word o Google Docs e incollarlo in un campo di un modulo ha un'insidia comune: l'editor di testo a volte inserisce uno spazio unificatore (U+00A0, lo stesso carattere dell'entità HTML ) al posto di uno spazio normale, proprio nei punti in cui non vuole che il testo vada a capo in modo scomodo.
Perché causa bug strani
Il sintomo più classico è un confronto tra stringhe che restituisce inaspettatamente "non uguali", anche se il testo sullo schermo appare identico. La causa è spesso che una stringa contiene uno spazio normale e l'altra quello spazio unificatore importato da Word. Visivamente non c'è differenza; per il computer sì — ed è proprio il tipo di bug che passa inosservato in una code review perché non si vede nel diff.
Trim
Trim rimuove i caratteri di spazio bianco dall'inizio e dalla fine di una stringa, lasciando invariato il contenuto in mezzo. È un'operazione standard di pulizia dell'input utente — uno spazio in più accidentale all'inizio di un campo di un modulo non dovrebbe influire sul confronto o sulla validazione di un valore.
Comprimere gli spazi
Un'altra operazione comune è sostituire più caratteri di spazio bianco consecutivi con uno solo. È utile per testo copiato da una fonte formattata (un PDF o una tabella, ad esempio), dove possono comparire doppi spazi o tabulazioni accidentali al posto di un singolo spazio.
A cosa serve
- Diagnosticare perché il confronto tra due stringhe apparentemente identiche fallisce.
- Ripulire da caratteri superflui e invisibili un testo copiato da un elaboratore di testi o da una pagina web.
- Normalizzare l'input dell'utente prima di salvarlo in un database.
Caratteri a larghezza zero
Oltre ai caratteri di spaziatura visibili esistono caratteri a larghezza zero (zero-width space, zero-width joiner) — non occupano alcuno spazio sullo schermo, ma sono presenti nel testo come caratteri distinti. Questi caratteri a volte finiscono nel testo quando si copia da alcuni siti o messaggistiche e possono rompere silenziosamente il confronto di stringhe o la ricerca, restando completamente invisibili anche in un editor di testo.