| Crates.io | sansaccent |
| lib.rs | sansaccent |
| version | 0.1.0 |
| created_at | 2025-08-24 07:08:45.202424+00 |
| updated_at | 2025-08-24 07:08:45.202424+00 |
| description | Convertit les chaînes françaises en slugs URL-friendly en supprimant accents et caractères spéciaux |
| homepage | https://github.com/xulien/sansaccent |
| repository | https://github.com/xulien/sansaccent |
| max_upload_size | |
| id | 1808137 |
| size | 35,412 |
Petit utilitaire pour la normalisation de texte français en URLs conviviales (slugs).
sansaccent est un utilitaire spécialement conçu pour le français qui normalise l'accentuation et les caractères spéciaux, en remplaçant les espaces par des tirets. Cette bibliothèque est particulièrement utile pour :
✅ Suppression des accents et caractères diacritiques
✅ Conversion en minuscules
✅ Gestion des ligatures françaises (œ → oe, æ → ae)
✅ Remplacement des caractères spéciaux sémantiques (€ → euro, & → et, @ → at, % → pourcent)
✅ Normalisation des espaces multiples
✅ Suppression des guillemets typographiques
✅ Support Unicode complet
✅ Trait Slugify pour &str, String et Cow<'_, str>
✅ Intégration Serde optionnelle (feature serde) pour sérialiser/désérialiser des slugs
Ajoutez sansaccent à votre Cargo.toml :
[dependencies]
sansaccent = "1.0.0"
Ou utilisez cargo pour l'installer :
cargo add sansaccent
Activer l'intégration Serde (optionnelle):
[dependencies]
sansaccent = { version = "1.0.0", features = ["serde"] }
use sansaccent::slugify;
fn main() {
println!("{}", slugify("Café de l'été"));
// Affiche: "cafe-de-l-ete"
println!("{}", slugify("Un cœur en hiver"));
// Affiche: "un-coeur-en-hiver"
println!("{}", slugify("L'æther & l'€uro"));
// Affiche: "l-aether-et-l-euro-uro"
}
use sansaccent::Slugify;
fn main() {
let s = String::from("Café de l'été");
println!("{}", s.slugify()); // "cafe-de-l-ete"
}
serde)use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize)]
struct Post {
// Le slug sera normalisé à la sérialisation et à la désérialisation
#[serde(with = "sansaccent::serde")]
slug: String,
}
use sansaccent::slugify;
// Texte avec caractères spéciaux
assert_eq!(slugify("Prix: 10€"), "prix-10-euro");
assert_eq!(slugify("Tom & Jerry"), "tom-et-jerry");
assert_eq!(slugify("contact@example.com"), "contact-at-example-com");
assert_eq!(slugify("50% de réduction"), "50-pourcent-de-reduction");
// Guillemets et caractères typographiques
assert_eq!(slugify("«guillemets français»"), "guillemets-francais");
assert_eq!(slugify("'apostrophes'"), "apostrophes");
// Gestion des espaces multiples
assert_eq!(slugify("trop d'espaces entre les mots"), "trop-d-espaces-entre-les-mots");
// Suppression des séparateurs en début/fin
assert_eq!(slugify("--test--"), "test");
assert_eq!(slugify(" test "), "test");
slugify(input: &str) -> StringConvertit une chaîne de caractères en slug URL-friendly.
Paramètres :
input: &str - La chaîne à convertirRetour :
String - La chaîne normaliséeExemple :
let result = slugify("Un très beau café ☕");
assert_eq!(result, "un-tres-beau-cafe");
Pour exécuter la suite de tests complète :
cargo test
Pour exécuter les tests avec sortie détaillée :
cargo test -- --nocapture
Pour exécuter un test spécifique :
cargo test test_ligatures
La bibliothèque inclut plus de 19 tests couvrant :
MIT OR Apache-2.0
Les contributions sont les bienvenues ! N'hésitez pas à :
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)Pour signaler un bug ou demander une fonctionnalité, veuillez ouvrir une issue sur le dépôt du projet.