Нулевая ширина и невидимые
ZERO WIDTH SPACE (U+200B)
Пробел без ширины. Он занимает место в строке, отмечает точку, где допустим перенос, и не рисует ровно ничего.
- Кодовая позиция
U+200B- Категория
- Нулевая ширина и невидимые
- Удаляется по умолчанию
- Да
- Управляющий параметр
- Параметр не нужен
- Может нести нагрузку
- Нет
Откуда он берётся
Системы управления контентом и текстовые редакторы вставляют его, чтобы длинная ссылка или сплошной поток иероглифов могли перенестись на новую строку. Он же приезжает вместе с текстом, скопированным с веб-страницы, из шаблонизаторов, которые ставят его между тегами, и из инструментов, которые прячут данные намеренно: это самый частый носитель в стеганографии на символах нулевой ширины.
Почему это важно
Unicode относит его к форматирующим символам, а не к пробельным, поэтому он переживает копирование, разрывает слово для проверки орфографии, ломает точный поиск и `grep`, а скрытому каналу даёт по биту на позицию. «привет» и «привет» выглядят одинаково и не равны друг другу.
До и после
Две строки, которые выглядят одинаково. Поиску по слову «привет» отвечает только вторая.
Символ показан подписанной плашкой, чтобы было видно, где он стоит. В вашем тексте он не рисует ровно ничего.
Когда он уместен
Только как подсказка о переносе там, где строка иначе вылезет за край: длинная ссылка, абзац на китайском. Русской или латинской прозе он не нужен, а в HTML для той же работы есть `<wbr>`.
Как его удалить
Его удаляет базовый проход. Включать нечего, и нет ни одного случая, когда Ghostchars оставил бы его на месте.
Это водяной знак ИИ?
Используется для сокрытия данных — но не водяной знак
Нет. U+200B — не водяной знак, и ни одна крупная модель не помечает им свой вывод. Это классический носитель для самодельной скрытой нагрузки, так что его присутствие говорит, что текст через что-то прошёл — CMS, редактор, стеганографическую утилиту, — но не о том, кто его написал.
Известный носитель намеренно спрятанных данных. Кто-то поместил его туда специально, а это уже другой вопрос, чем то, кто написал слова.
Вопросы
Виден ли пробел нулевой ширины хоть в каком-нибудь редакторе?
При обычном отображении — нет: у него нет ни глифа, ни ширины. Он проявляется только в hex-редакторе, в редакторе с включённым показом невидимых символов или в инструменте вроде этого.
Не испортит ли текст его удаление?
Нет. Удаление U+200B может только убрать возможность переноса строки. Оно никогда не меняет ни слова, ни пробела, ни одного видимого символа.
Почему поиск не находит слово, внутри которого он стоит?
Поиск сравнивает кодовые позиции. Пробел нулевой ширины между двумя буквами делает слово другой строкой, не той, что вы набрали, — поэтому точное совпадение, запросы к базе и `grep` его пропускают.
Проверьте свой текст
Вставьте что угодно в инструмент очистки, чтобы увидеть каждый скрытый символ: позицию, кодовую позицию и то, что произойдёт с каждым из них. Ничего никуда не отправляется.