Не всі пробільні символи однакові. Окрім звичайного пробілу є табуляція, невидимий non-breaking space ( ), нульової ширини пробіл і різні символи переносу рядка — і всі вони можуть виглядати однаково на екрані, лишаючись різними символами для комп’ютера.
Чому це спричиняє дивні баги
Найкласичніший приклад — порівняння рядків, яке несподівано повертає «не рівні», хоча текст на екрані виглядає ідентично. Причина часто в тому, що один рядок містить звичайний пробіл, а інший — non-breaking space, скопійований, наприклад, із веб-сторінки. Візуально різниці немає, для комп’ютера — є.
Тримінг (trim)
Trim прибирає пробільні символи з початку і кінця рядка, залишаючи вміст усередині незмінним. Це стандартна операція очищення користувацького вводу — випадковий зайвий пробіл на початку поля форми не повинен впливати на порівняння чи валідацію значення.
Схлопування пробілів
Інша поширена операція — заміна кількох послідовних пробільних символів одним. Це корисно для тексту, скопійованого з форматованого джерела (наприклад, PDF чи таблиці), де можуть бути випадкові подвійні пробіли чи табуляції замість одного пробілу.
Навіщо це потрібно
- Продіагностувати, чому порівняння двох на вигляд однакових рядків не проходить.
- Очистити текст, скопійований з іншого джерела, від зайвих і невидимих символів.
- Нормалізувати користувацький ввід перед збереженням у базу даних.
Символи нульової ширини
Окрім видимих пробільних символів існують символи нульової ширини (zero-width space, zero-width joiner) — вони взагалі не займають місця на екрані, але присутні в тексті як окремі символи. Такі символи іноді потрапляють у текст при копіюванні з деяких сайтів чи месенджерів і можуть непомітно зламати порівняння рядків чи пошук, залишаючись повністю невидимими навіть у текстовому редакторі.