Publicado 17 de agosto de 2023
Essa classe que chamei de SlugHelper contém métodos para auxiliar na criação de URLs amigáveis (slugs) a partir de strings.
1public static class SlugHelper
2{
3 public static string RemoveAccents(this string text)
4 {
5 if (string.IsNullOrWhiteSpace(text))
6 return text;
7
8 text = text.Normalize(NormalizationForm.FormD);
9 char[] chars = text
10 .Where(c => CharUnicodeInfo.GetUnicodeCategory(c)
11 != UnicodeCategory.NonSpacingMark).ToArray();
12
13 return new string(chars).Normalize(NormalizationForm.FormC);
14 }
15
16 public static string Slugify(this string phrase)
17 {
18 string output = phrase.RemoveAccents().ToLower();
19
20 output = Regex.Replace(output, @"[^A-Za-z0-9\s\-_]", "");
21
22 output = Regex.Replace(output, @"[\s\-_]+", "-");
23
24 output = output.Trim('-');
25
26 return output;
27 }
28}
29
A principal função dessa classe é transformar uma string em um formato mais adequado para ser usada como parte de uma URL, removendo acentos, caracteres especiais e espaços em branco, substituindo-os por hífens e tornando tudo em letras minúsculas.
Vamos analisar o código linha por linha para entender o que ele faz:
1 - public static string RemoveAccents(this string text)
Declara um método de extensão para a classe string chamado RemoveAccents, que remove os acentos da string.
2 - if (string.IsNullOrWhiteSpace(text)) return text;
Verifica se a string de entrada é nula, vazia ou contém apenas espaços em branco. Se for o caso, retorna a própria string sem modificação.
3 - text = text.Normalize(NormalizationForm.FormD);
Normaliza a string de entrada usando a forma de normalização Unicode D, que separa os caracteres diacríticos (como acentos) dos caracteres-base.
4 - char[] chars = text.Where(c => CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark).ToArray();
Usa LINQ para filtrar os caracteres da string normalizada. Remove todos os caracteres que não são marcas de espaço não espaçadoras (basicamente, remove os acentos).
5 - return new string(chars).Normalize(NormalizationForm.FormC);
Cria uma nova string a partir dos caracteres filtrados e a normaliza novamente usando a forma de normalização Unicode C. Isso garante que a string resultante esteja em uma forma normalizada e sem acentos.
6 - public static string Slugify(this string phrase)
Declara um método de extensão para a classe string chamado Slugify, que transforma a string em um slug.
7 - string output = phrase.RemoveAccents().ToLower();
Chama o método RemoveAccents para remover os acentos e normalizar a string, e então converte a string resultante para letras minúsculas.
8 - output = Regex.Replace(output, @"[^A-Za-z0-9\s\-_]", "");
Usa uma expressão regular para remover todos os caracteres que não são letras, números, espaços, hífens ou underscores.
9 - output = Regex.Replace(output, @"[\s\-_]+", "-");
Usa uma expressão regular para substituir sequências de espaços, hífens e underscores por um único hífen.
10 - output = output.Trim('-');
Remove hífens no início e no final da string, se houver.
11 - return output;
Retorna a string resultante, que agora está no formato de slug, pronto para ser usado em URLs.
1public class SlugHelperTests
2{
3 [Theory]
4 [InlineData("Hello, World!", "hello-world")]
5 [InlineData("This is a test.", "this-is-a-test")]
6 [InlineData("Slûg Exåmplé", "slug-example")]
7 [InlineData("", "")]
8 [InlineData("----", "")]
9 [InlineData(" Testing Spaces ", "testing-spaces")]
10 [InlineData("ALL CAPS", "all-caps")]
11 [InlineData("Mixed CaSe", "mixed-case")]
12 [InlineData("123_456", "123-456")]
13 [InlineData("Special #Chars!", "special-chars")]
14 public void Slugify_ShouldGenerateCorrectSlugs(string input, string expected) {
15 // Act
16 string actual = SlugHelper.Slugify(input);
17
18 // Assert
19 Assert.Equal(expected, actual);
20 }
21}
22
Em resumo, esse código define uma classe com dois métodos de extensão para strings: RemoveAccents
que remove acentos e normaliza a string, e Slugify
que gera um slug a partir da string, removendo acentos, caracteres especiais, espaços em branco e substituindo-os por hífens, e convertendo tudo para letras minúsculas. Isso serve para criar URLs mais amigáveis para SEO e para melhorar a usabilidade em aplicações web.