텍스트 및 일상 도구 · 텍스트 도구 키트
슬러그 생성기가 악센트를 접는 방법: NFD 분해 설명
· 작동 방식
URL 슬러그 텍스트 변환 자바스크립트
유니코드 표준 분해가 기본 문자를 악센트에서 분리하여 'Café Crème'이 caf-cr-me가 아닌 카페 크림이 되고 분해만으로는 부족한 부분을 설명합니다.
caf-cr-me — 이름을 엉망으로 만드는 일반적인 슬러그 버그와 그 이유
약한 슬러그 루틴은 좁은 ASCII 범위 밖의 모든 문자를 삭제할 때 `Café Crème`을 `caf-cr-me`로 바꿀 수 있습니다. 눈에 보이는 악센트는 사라지지만 기본 문자도 함께 사라져 기사 제목과 더 이상 유사하지 않은 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` 오류를 방지하기에 충분합니다.
작업한 제목을 텍스트 대소문자 변환기에 붙여넣고 슬러그 옵션을 선택하여 동일한 텍스트 상자에서 최종 결과를 검사합니다. 제목에 표시된 악센트 케이스 이외의 문자가 포함된 경우 대상 플랫폼에 대한 출력을 검토하세요. 변환기는 예측 가능한 브라우저 측 변환을 제공하는 반면 편집자는 경로 규칙을 계속 담당합니다.