テキストおよび日常ツール · テキスト ツールキット
スラグ ジェネレーターがアクセントを折り畳む方法: NFD 分解の説明
· 仕組み
URL スラッグ テキスト変換 JavaScript
Unicode 正規分解がどのように基本文字をアクセントから分離し、「Café Crème」が caf-cr-me ではなくカフェ クリームになるのか、また分解だけでは不十分な場合について説明します。
caf-cr-me — 名前を混乱させる一般的なナメクジのバグとその原因
弱いスラッグ ルーチンは、狭い ASCII 範囲外のすべての文字を削除すると、`Café Crème` を `caf-cr-me` に変える可能性があります。目に見えるアクセントは消えますが、基礎となる基本文字も一緒に消えて、記事のタイトルとは似ていない URL が残ります。そのダメージは、名前、場所、繰り返しの編集カテゴリで特に顕著です。
ToolAcre は `slugify` で別のパスを使用します。まず入力を正規化し、次に結果の文字を保持したまま、結合マークの特定の範囲を削除します。その後になって初めて、テキストと図形の区切り文字が小文字になります。この順序が、`Café Crème` が母音の欠落したフラグメントではなく `cafe-creme` になる理由です。
1 つの文字、2 つの表現 — é を単一のコードポイントにする方法、または e の後にアキュートアクセントを組み合わせたものにする方法
同一に見えるテキストでも、内部シーケンスが異なる場合があります。 `é` は、1 つの事前に作成された文字として、または通常の `e` の後に結合された鋭角マークとして到着する場合があります。コンテンツ編集者は通常、CMS、ドキュメント、またはクリップボードからどの表現が来たのかを確認できませんが、文字ごとのフィルターは 2 つの入力を別々に処理できます。
置換ルールが一方の形式を認識し、もう一方の形式を認識しない場合、この隠れた違いが重要になります。 ToolAcre は、事前に作成されたスペルごとに個別の置換を記述することを回避します。正規化により、スラッグ パイプラインはより一貫性のある中間形式になるため、サポートされているアクセント記号は、URL で基本文字が使用可能なままの状態で、後の 1 つのステップで削除できます。
正規化形式 D — 正規分解がすべてのアクセント付き文字を基本文字と結合記号に書き換える方法
実装は、小文字や区切り文字を処理する前に `.normalize("NFD")` を呼び出します。 JavaScript ランタイムによって処理される正規分解を持つ文字の場合、基本文字とそれに続く 1 つ以上の結合マークが生成されます。この関数は、フランス語またはスペイン語のスペルの独自のカタログを維持せず、単語を意味的に検査しません。
概要では、NFD はすべてのアクセント付き文字を書き換えると述べていますが、ソースはより狭いステートメントをサポートしています。分解は文字によって異なり、次の削除式は `U+0300` から `U+036F` までのコード ポイントをカバーします。したがって、この記事では、すべてのスクリプトやマークに対して普遍的なアクセントの削除を約束するのではなく、コードによって示される動作について説明する必要があります。
NFD はサポートされている文字を分解します。実装では、すべてのアクセント付き文字が分離されることは保証されません。
正規化後、`slugify` は `/[̀-ͯ]/g` を適用し、一致する各マークを空の文字列に置き換えます。 `é` の分解形式では、`e` はその範囲に一致しませんが、鋭角マークは一致します。マークのみを削除すると、以前の ASCII のみのアプローチでは破棄されていた可読ベース文字が残ります。
これはアクセントの折りたたみであり、一般的なテキストのクリーンアップ パスではありません。正規表現は意図的に区切り文字のルールの前に配置され、基本文字が後で文字として参加できるようになります。サポートされていないランがすでに折りたたまれた後にマークの除去が行われた場合、分解されたマークがセパレーターの配置に影響を与え、忠実度の低いスラッグが生成される可能性があります。
スラグ パイプラインの残りの部分 — 小文字化、英数字以外の文字列を単一のハイフンに折りたたむ、先頭と末尾の区切り文字をトリミングする、絵文字を削除する
残りのパイプラインは、正規化されたテキストを小文字にし、Unicode 文字または数字ではない各実行を構成された区切り文字 (デフォルトはハイフン) に置き換えます。 2 番目の式は、両端から繰り返される区切り文字をトリミングします。したがって、絵文字と句読点はコンテンツとして消えますが、隣接するサポートされていない文字は複数のハイフンではなく 1 つの境界になります。
アウトラインでは非英数字の折りたたみについて説明していますが、実際のパターンでは ASCII のみのアルファベットではなく Unicode プロパティ エスケープを使用しています。非ラテン文字の文字は、小文字化した後もスラッグ内に残ることがあります。この構成では、音訳ステップがないことが確認されています。記号は削除されますが、保持された文字は、おおよそのラテン語の綴りとして自動的に書き換えられません。
このスラッグ パイプラインの残りの部分は、スクリプトからの文字と数字を保持し、他の実行を選択された区切り文字に置き換えます。
`Café Crème & Co. — Été 2024!` に従って実装してください。 NFD は、サポートされているアクセント付き文字を基本文字と記号に分離します。マーク削除式は `Cafe Creme & Co. — Ete 2024!` のままで、句読点が処理される前に小文字にすると `cafe creme & co. — ete 2024!` が生成されます。
文字と数字以外の連続はハイフンになり、先頭と末尾の区切り文字が削除された後、意味のあるシーケンス `cafe-creme-co-ete-2024` が生成されます。アンパサンド、ピリオド、ダッシュ、および感嘆符は、音声名やカスタム置換を受け取りません。これらは、この変換における文字と数字の実行の間の境界としてのみ機能します。
分解ではできないこと — ø、ł、ß、æ などの文字には削除するアクセントがないため、音訳テーブルが必要です
分解は音訳ではありません。 `ø`、`ł`、`ß`、`æ` などの文字は、このパイプラインの後でも Unicode 文字であるため、プロパティベースのフィルターは、`o`、`l`、`ss`、または `ae` のテーブルを参照するのではなく、これらの文字を保持します。ユーザーが音訳テーブルを必要としていると主張することは、他の場所では有益な設計アドバイスになるかもしれませんが、このツールにはそのようなテーブルは存在しません。
この違いは、結果が ASCII のみではなく有効なプロジェクト スラグである理由も説明します。パブリッシング システムで ASCII が必要な編集者は、出力を使用する前に別のシステム制約を確認する必要があります。 ToolAcre は、実装された分解とマークの範囲に対するアクセントの折りたたみを約束します。すべてのタイトルについて、言語を意識したスペル、可逆変換、またはラテン語出力を保証するものではありません。
除去可能なマークのない文字は文字のままです。このツールには音訳テーブルがありません
信頼できるポイントは手順です。最初に正規化し、サポートされている結合マークを削除し、小文字にし、サポートされていないランを折りたたみ、区切り文字をトリミングします。各ステージには 1 つの目に見える責任があり、そのシーケンスでは句読点が破棄される前に基本文字が保持されます。ソースに含まれていない言語ルールを作成しなくても、一般的な `caf-cr-me` エラーを防ぐにはこれで十分です。
作業中のタイトルをテキストケースコンバーターに貼り付け、スラッグオプションを選択して、同じテキストボックスで最終結果を検査します。タイトルに、示されているアクセントケース以外の文字が含まれている場合は、出力先のプラットフォームに対して出力を確認してください。コンバーターは予測可能なブラウザー側の変換を提供しますが、エディターはルート規則を引き続き担当します。