Текст и повседневные инструменты · Текстовый инструментарий
Как генераторы слизней расставляют акценты: объяснение разложения NFD
· Как это работает
URL-слаги преобразование текста javascript
Объясняет, как каноническая декомпозиция Unicode отделяет базовую букву от ее ударения, так что «Café Crème» становится cafe-creme, а не caf-cr-me, и где одной декомпозиции не хватает.
caf-cr-me — распространенный слизень, искажающий имена, и почему это происходит
Слабая процедура слизняка может превратить `Café Crème` в `caf-cr-me`, когда она удаляет каждый символ за пределами узкого диапазона ASCII. Видимые акценты исчезают, но вместе с ними исчезают и основные буквы, оставляя URL, который больше не похож на заголовок статьи. Этот ущерб особенно очевиден в именах, местах и повторяющихся редакционных категориях.
ToolAcre идет по другому пути в `slugify`. Сначала он нормализует ввод, затем удаляет определенный диапазон комбинируемых знаков, сохраняя при этом полученные буквы. Только после этого текст и разделители фигур переводятся строчными буквами. Именно порядок является причиной того, что `Café Crème` становится `cafe-creme` вместо фрагмента с отсутствующими гласными.
Один символ, два представления — как é может быть одной кодовой точкой или буквой e, за которой следует комбинированный острый ударение
Текст, который выглядит одинаково, может иметь разную внутреннюю последовательность. `é` может появиться как один заранее составленный символ или как обычный `e`, за которым следует комбинированный острый знак. Редактор контента обычно не может увидеть, какое представление пришло из CMS, документа или буфера обмена, однако посимвольный фильтр может обрабатывать два входных данных по-разному.
Это скрытое различие имеет значение, когда правило замены распознает одну форму, но не другую. ToolAcre позволяет избежать написания отдельной замены для каждого заранее составленного написания. Нормализация придает слаг-конвейеру более согласованную промежуточную форму, поэтому поддерживаемые знаки акцента можно удалить на одном более позднем этапе, в то время как базовые буквы остаются доступными для URL.
Форма нормализации D — как каноническая декомпозиция переписывает каждую букву с ударением в базовую букву плюс объединяя знаки.
Реализация вызывает `.normalize("NFD")` перед началом работы с строчными буквами или разделителем. Для символов, каноническое разложение которых обрабатывается средой выполнения JavaScript, это создает базовый символ, за которым следует одна или несколько меток объединения. Функция не ведет собственный каталог французских или испанских вариантов написания и не проверяет семантику слов.
В схеме говорится, что NFD переписывает каждую букву с ударением, но источник поддерживает более узкое утверждение. Декомпозиция зависит от символа, и следующее выражение удаления охватывает кодовые точки от `U+0300` до `U+036F`. Поэтому статья должна описывать поведение, демонстрируемое кодом, а не обещать универсальное удаление акцентов для каждого шрифта или знака.
NFD разлагает поддерживаемые символы; реализация не обещает, что каждая буква с ударением разделяется
После нормализации `slugify` применяет `/[̀-ͯ]/g` и заменяет каждую совпадающую метку пустой строкой. В разложенной форме `é` `e` не соответствует этому диапазону, в отличие от острой отметки. Удаление только метки оставляет читаемую базовую букву, которую предыдущий подход с использованием только ASCII отбрасывал бы.
Это сворачивание акцентов, а не общая очистка текста. Регулярное выражение намеренно помещается перед правилом разделителей, что позволяет базовой букве позже участвовать в качестве буквы. Если удаление метки произошло после того, как неподдерживаемые участки уже были разрушены, разложившаяся метка может повлиять на размещение сепаратора и привести к менее точному срезу.
Остальная часть конвейера слизней — строчные буквы, свертывание небуквенно-цифровых фрагментов в один дефис, обрезка начальных и конечных разделителей, удаление смайлов.
Оставшийся конвейер переводит нормализованный текст в нижний регистр и заменяет каждый запуск, который не является буквой или цифрой Юникода, настроенным разделителем, который по умолчанию равен дефису. Второе выражение обрезает повторяющиеся разделители с обоих концов. Таким образом, эмодзи и знаки препинания исчезают как содержимое, а соседние неподдерживаемые символы становятся одной границей, а не несколькими дефисами.
Схема описывает небуквенно-цифровое свертывание, но фактический шаблон использует экранирование свойств Юникода, а не алфавит, содержащий только ASCII. Буквы, написанные нелатинскими буквами, могут оставаться в поле после перевода в нижний регистр. Конфигурация подтверждает отсутствие этапа транслитерации: символы удаляются, но оставшиеся буквы не перезаписываются автоматически в приблизительное латинское написание.
Остальная часть этого конвейера сохраняет буквы и цифры из любого сценария, заменяя другие прогоны выбранным разделителем.
Следуйте `Café Crème & Co. — Été 2024!` через реализацию. NFD разделяет поддерживаемые символы с диакритическими знаками на базовые буквы и знаки. Выражение удаления знака оставляет `Cafe Creme & Co. — Ete 2024!`, а строчные буквы создают `cafe creme & co. — ete 2024!` до обработки знаков препинания.
Небуквенные и нецифровые прогоны затем преобразуются в дефисы, образуя значимую последовательность `cafe-creme-co-ete-2024` после обрезки начального и конечного разделителей. Амперсанд, точка, тире и восклицательный знак не получают произносимых названий или пользовательских замен. В этом преобразовании они служат только границами между буквенно-цифровыми сериями.
Чего не может сделать разложение — такие буквы, как ø, ł, ß и æ, не имеют ударения, которое нужно удалить, и им нужна таблица транслитерации.
Разложение — это не транслитерация. Такие символы, как `ø`, `ł`, `ß` и `æ`, после этого конвейера по-прежнему являются буквами Юникода, поэтому фильтр на основе свойств сохраняет их, а не обращается к таблице для `o`, `l`, `ss` или `ae`. Утверждение о том, что пользователям нужна таблица транслитерации, может быть полезным советом по дизайну в другом месте, но в этом инструменте такой таблицы не существует.
Это различие также объясняет, почему результатом может быть допустимый фрагмент проекта, но не только ASCII. Редакторы, чья издательская система требует ASCII, должны проверить это отдельное системное ограничение перед использованием выходных данных. ToolAcre обещает свертывание акцентов для реализованного диапазона разложения и маркировки; он не обещает правописание с учетом языка, обратимое преобразование или вывод на латинице для каждого заголовка.
Символы без удаляемых знаков остаются буквами; в этом инструменте нет таблицы транслитерации
Надежный вывод является процедурным: сначала нормализовать, удалить поддерживаемые знаки объединения, строчные буквы, свернуть неподдерживаемые фрагменты и обрезать разделители. На каждом этапе есть одна видимая ответственность, и их последовательность сохраняет базовые буквы до того, как пунктуация будет отброшена. Этого достаточно, чтобы предотвратить распространенный сбой `caf-cr-me` без изобретения языковых правил, которых нет в исходном коде.
Вставьте обработанный заголовок в конвертер текстового регистра и выберите опцию «slug», чтобы проверить окончательный результат в том же текстовом поле. Если заголовок содержит буквы за пределами продемонстрированного акцента, проверьте выходные данные на целевой платформе. Конвертер обеспечивает предсказуемое преобразование на стороне браузера, в то время как редактор остается ответственным за соглашения о маршрутах.