Français

Texte et outils quotidiens · Boîte à outils de texte

Comment les générateurs de slugs plient les accents : explication de la décomposition NFD

· Comment ça marche

url-slugs conversion de texte javascript

Lettres accentuées se séparant en lettres de base et marques avant de devenir un slug d'URL
Illustration vectorielle originale de ToolAcre

Explique comment la décomposition canonique Unicode sépare une lettre de base de son accent afin que « Café Crème » devienne café-crème plutôt que caf-cr-me, et où la décomposition seule échoue.

caf-cr-me — le bug slug commun qui détruit les noms, et pourquoi cela se produit

Une routine slug faible peut transformer `Café Crème` en `caf-cr-me` lorsqu'elle supprime tous les caractères en dehors d'une plage ASCII étroite. Les accents visibles disparaissent, mais les lettres de base sous-jacentes disparaissent avec eux, laissant une URL qui ne ressemble plus au titre de l'article. Ces dégâts sont particulièrement évidents dans les noms, les lieux et les catégories éditoriales répétées.

ToolAcre emprunte un chemin différent dans `slugify`. Il normalise d'abord l'entrée, puis supprime une plage spécifique de marques de combinaison tout en conservant les lettres résultantes. Ce n'est qu'ensuite qu'il met en minuscules les séparateurs de texte et de forme. L'ordre est la raison pour laquelle `Café Crème` devient `cafe-creme` au lieu d'un fragment avec des voyelles manquantes.

Un caractère, deux représentations — comment é peut être un seul point de code ou un e suivi d'un accent aigu combiné

Un texte qui semble identique peut avoir des séquences internes différentes. Un `é` peut arriver sous la forme d'un caractère précomposé, ou sous la forme d'un `e` ordinaire suivi d'une marque aiguë combinée. Un éditeur de contenu ne peut généralement pas voir quelle représentation provient d'un CMS, d'un document ou du presse-papiers, mais un filtre caractère par caractère peut traiter les deux entrées différemment.

Cette différence cachée est importante lorsqu'une règle de remplacement reconnaît une forme mais pas l'autre. ToolAcre évite d'écrire un remplacement distinct pour chaque orthographe précomposée. La normalisation donne au pipeline slug une forme intermédiaire plus cohérente, de sorte que les marques d'accent prises en charge peuvent être supprimées ultérieurement tandis que les lettres de base restent disponibles pour l'URL.

Formulaire de normalisation D – comment la décomposition canonique réécrit chaque lettre accentuée en lettre de base et en combinant des marques

L'implémentation appelle `.normalize("NFD")` avant tout travail de mise en minuscules ou de séparateur. Pour les caractères dont la décomposition canonique est gérée par le runtime JavaScript, cela produit un caractère de base suivi d'une ou plusieurs marques de combinaison. La fonction ne gère pas son propre catalogue d'orthographe française ou espagnole et n'inspecte pas les mots sémantiquement.

Le plan indique que NFD réécrit chaque lettre accentuée, mais la source prend en charge une déclaration plus étroite. La décomposition dépend du caractère et l'expression de suppression suivante couvre les points de code de `U+0300` à `U+036F`. L'article devrait donc décrire le comportement démontré par le code plutôt que de promettre la suppression universelle des accents pour chaque script ou marque.

NFD décompose les caractères pris en charge ; la mise en œuvre ne promet pas que chaque lettre accentuée sépare

Après la normalisation, `slugify` applique `/[̀-ͯ]/g` et remplace chaque marque correspondante par une chaîne vide. Dans la forme décomposée de `é`, le `e` ne correspond pas à cette plage, contrairement à la marque aiguë. La suppression uniquement de la marque laisse la lettre de base lisible que l'approche précédente uniquement ASCII aurait ignorée.

Il s'agit d'un pliage d'accents, pas d'une passe générale de nettoyage de texte. L'expression régulière est délibérément placée avant la règle des séparateurs, permettant à la lettre de base de participer ultérieurement en tant que lettre. Si la suppression de la marque s'est produite après que les pistes non prises en charge aient déjà été réduites, une marque décomposée pourrait influencer le placement du séparateur et produire un slug moins fidèle.

Le reste du pipeline slug : mise en minuscules, réduction des séquences non alphanumériques en traits d'union simples, suppression des séparateurs de début et de fin, suppression des emoji

Le pipeline restant met en minuscules le texte normalisé et remplace chaque exécution qui n'est pas une lettre ou un chiffre Unicode par le séparateur configuré, qui est par défaut un trait d'union. Une deuxième expression supprime les séparateurs répétés aux deux extrémités. Les emoji et la ponctuation disparaissent donc en tant que contenu, tandis que les caractères adjacents non pris en charge deviennent une limite plutôt que plusieurs traits d'union.

Le plan décrit un effondrement non alphanumérique, mais le modèle réel utilise des échappements de propriétés Unicode, et non un alphabet ASCII uniquement. Les lettres provenant d'écritures non latines peuvent rester dans le slug après avoir été mises en minuscules. La configuration confirme qu'il n'y a pas d'étape de translittération : les symboles sont supprimés, mais les lettres conservées ne sont pas automatiquement réécrites en orthographe latine approximative.

Le reste de ce pipeline slug conserve les lettres et les chiffres de n'importe quel script tout en remplaçant les autres exécutions par le séparateur choisi.

Suivez `Café Crème & Co. — Été 2024!` tout au long de la mise en œuvre. NFD sépare les caractères accentués pris en charge en lettres de base et marques. L'expression de suppression de marque laisse `Cafe Creme & Co. — Ete 2024!` et la mise en minuscule produit `cafe creme & co. — ete 2024!` avant que la ponctuation ne soit traitée.

Les passages sans lettres et sans chiffres deviennent alors des traits d'union, produisant la séquence significative `cafe-creme-co-ete-2024` après la suppression des séparateurs de début et de fin. L'esperluette, le point final, le tiret et le point d'exclamation ne reçoivent pas de noms prononcés ni de substitutions personnalisées. Ils servent uniquement de limites entre les exécutions de lettres et de chiffres dans cette conversion.

Ce que la décomposition ne peut pas faire : des lettres comme ø, ł, ß et æ n'ont pas d'accent à dépouiller et ont besoin d'une table de translittération

La décomposition n'est pas une translittération. Les caractères tels que `ø`, `ł`, `ß` et `æ` sont toujours des lettres Unicode après ce pipeline, donc le filtre basé sur les propriétés les conserve plutôt que de consulter une table pour `o`, `l`, `ss` ou `ae`. Affirmer que les utilisateurs ont besoin d'une table de translittération peut être un conseil de conception utile ailleurs, mais une telle table n'existe pas dans cet outil.

Cette distinction explique également pourquoi le résultat peut être un slug de projet valide sans être uniquement en ASCII. Les éditeurs dont le système de publication nécessite ASCII doivent vérifier cette contrainte système distincte avant d'utiliser la sortie. ToolAcre promet le pliage des accents pour la plage de décomposition et de marquage implémentée ; il ne promet pas une orthographe adaptée à la langue, une conversion réversible ou une sortie latine pour chaque titre.

Les caractères sans marques amovibles restent des lettres ; cet outil n'a pas de table de translittération

La solution fiable à retenir est procédurale : normalisez d'abord, supprimez les marques de combinaison prises en charge, les minuscules, réduisez les séquences non prises en charge et coupez les séparateurs. Chaque étape a une responsabilité visible et leur séquence préserve les lettres de base avant que la ponctuation ne soit supprimée. Cela suffit pour éviter l'échec courant `caf-cr-me` sans inventer des règles de langage que la source ne contient pas.

Collez le titre travaillé dans le convertisseur de casse de texte et sélectionnez l'option slug pour inspecter le résultat final dans la même zone de texte. Si un titre comprend des lettres en dehors des cas d’accent démontrés, examinez le résultat par rapport à la plate-forme de destination. Le convertisseur fournit une transformation prévisible côté navigateur, tandis que l'éditeur reste responsable des conventions de routage.