Нормализация похожих символов в безопасный текст
Нормализация похожих символов заменяет каждого двойника обычным символом, который он имитирует, чтобы две одинаково выглядящие строки и при сравнении считались равными. Делайте это перед сравнением имён пользователей, проверкой по чёрным спискам или удалением дублирующихся идентификаторов.
Разбор примера
- Ввод
- Cоnfig file: аdmin2, Noёl, café
- Найденные письменности
- латиница (Latn), кириллица (Cyrl)
- Отмечено символов
- 7
| Позиция | Символ | Кодовая точка | Письменность | Замена | Правило |
|---|---|---|---|---|---|
| 0 | C | U+FF23 | латиница | C | Нормализация NFKC |
| 1 | о | U+043E | кириллица | o | Таблица похожих символов |
| 7 | fi | U+FB01 | латиница | fi | Нормализация NFKC |
| 10 | : | U+FF1A | общепринятая | : | Таблица похожих символов |
| 12 | а | U+0430 | кириллица | a | Таблица похожих символов |
| 17 | 2 | U+FF12 | общепринятая | 2 | Таблица похожих символов |
| 22 | ё | U+0451 | кириллица | ë | Таблица похожих символов |
- Сохранить читаемый Юникод
- Config file: admin2, Noël, café
- Строгий резервный вариант ASCII
- Config file: admin2, Noel, café
Как это работает
- Сначала известные двойники заменяются по встроенной таблице. Символы вне таблицы нормализуются с помощью NFKC, которая приводит полноширинные формы, лигатуры и другие символы совместимости к стандартным эквивалентам.
- Режим «Сохранить читаемый Юникод» оставляет букву с диакритикой, если она задана в таблице, например кириллическая ё → ë. «Строгий резервный вариант ASCII» использует простую ASCII-букву (ё → e).
- Буквы, которых нет в таблице и которые не меняет NFKC, сохраняются, поэтому café сохраняет акцент в обоих режимах. Нормализованный текст — это ключ для сравнения, а не вердикт безопасности: храните и оригинал и проверяйте отмеченные символы.
Преобразование выполняется с максимальной эффективностью: отображаемые путаные элементы и свертывание NFKC являются детерминированными, но некоторые допустимые Unicode не будут помечены.
Ваш текст
Вставить или ввести — результаты обновляются по мере ввода (слегка подпрыгивают при длительном вводе).
проверено 30 символов
7 подозрительных
Строгий резервный вариант ASCII
Оригинал (отмечены подозрительные символы)
Подозрительные символы в исходном виде подчеркнуты и помечены как «подозрительно». в дополнение к выделению цвета.
suspicious character Csuspicious character оnfig suspicious character filesuspicious character : suspicious character аdminsuspicious character 2, Nosuspicious character ёl, café
Очищенный вывод
Анализ символов
| Индекс (отсчет от 0) | Оригинал | Замена | Кодовая точка | Причина |
|---|---|---|---|---|
| 0 | C | C | U+FF23 | NFKC normalization changed this character (compatibility or width folding). |
| 1 | о | o | U+043E | Non-ASCII confusable mapped to a safer Latin ASCII equivalent. |
| 2 | n | n | U+006E | Not flagged as a confusable or compatibility character. |
| 3 | f | f | U+0066 | Not flagged as a confusable or compatibility character. |
| 4 | i | i | U+0069 | Not flagged as a confusable or compatibility character. |
| 5 | g | g | U+0067 | Not flagged as a confusable or compatibility character. |
| 6 | U+0020 | Not flagged as a confusable or compatibility character. | ||
| 7 | fi | fi | U+FB01 | NFKC normalization changed this character (compatibility or width folding). |
| 8 | l | l | U+006C | Not flagged as a confusable or compatibility character. |
| 9 | e | e | U+0065 | Not flagged as a confusable or compatibility character. |
| 10 | : | : | U+FF1A | Non-ASCII confusable mapped to a safer Latin ASCII equivalent. |
| 11 | U+0020 | Not flagged as a confusable or compatibility character. | ||
| 12 | а | a | U+0430 | Non-ASCII confusable mapped to a safer Latin ASCII equivalent. |
| 13 | d | d | U+0064 | Not flagged as a confusable or compatibility character. |
| 14 | m | m | U+006D | Not flagged as a confusable or compatibility character. |
| 15 | i | i | U+0069 | Not flagged as a confusable or compatibility character. |
| 16 | n | n | U+006E | Not flagged as a confusable or compatibility character. |
| 17 | 2 | 2 | U+FF12 | Non-ASCII confusable mapped to a safer Latin ASCII equivalent. |
| 18 | , | , | U+002C | Not flagged as a confusable or compatibility character. |
| 19 | U+0020 | Not flagged as a confusable or compatibility character. | ||
| 20 | N | N | U+004E | Not flagged as a confusable or compatibility character. |
| 21 | o | o | U+006F | Not flagged as a confusable or compatibility character. |
| 22 | ё | e | U+0451 | Non-ASCII confusable mapped to a safer Latin ASCII equivalent. |
| 23 | l | l | U+006C | Not flagged as a confusable or compatibility character. |
| 24 | , | , | U+002C | Not flagged as a confusable or compatibility character. |
| 25 | U+0020 | Not flagged as a confusable or compatibility character. | ||
| 26 | c | c | U+0063 | Not flagged as a confusable or compatibility character. |
| 27 | a | a | U+0061 | Not flagged as a confusable or compatibility character. |
| 28 | f | f | U+0066 | Not flagged as a confusable or compatibility character. |
| 29 | é | é | U+00E9 | Not flagged as a confusable or compatibility character. |