C# ile SEO uyumlu daha anlaşılır web adresleri hazırlama

PHP ile bu işi nasıl yapabileceğimizi daha önce anlatmıştım. C# ile geliştirdiğimiz bir uygulamada da gerekli olunca biraz araştırdım. PHP ile olan deneyimlerimden yola çıkarak ihtiyaç listesi çıkarttım ve bu ihtiyaçlar doğrultusunda biraz araştırma yaptım. Bu araştırmalardan bir tanesi HTML etiketlerinin temizlenmesi konusuydu ki ondan da bahsetmiştim. Geriye çentikli karakterlerin (ğ,ü,ş,ö,ç, ì, é vb.) çentiksiz hallerine ulaşmak gibi bir problem kalmıştı. Problemin çözümüne burada ulaştım.

PHP deneyimlerim ile ulaştığım metotları birleştirince aşağıdaki kod öbeği ortaya çıktı. Önce bir örnek vererek nasıl kullanacağınızı göstereyim;

string baslik = "Öğümce yolları çakıl taşları ile dolmuş - Test başlığı";
MakeSlug(baslik); // "ogumce-yollari-cakil-taslari-ile-dolmus-test-basligi" değerini döndürecektir.

Bu işi yapan kod öbeği:

public string MakeSlug(string input)
{
  input = input.ToLower(new CultureInfo("tr-TR"));
  input = StripTags(input);
  input = RemoveAccents(input);
  input = Regex.Replace(input, "&.+?;", "");
  input = Regex.Replace(input, "[^.a-z0-9 _-]", "");
  input = Regex.Replace(input, @"\.|\s+", "-");
  input = Regex.Replace(input, "-+", "-");
  input = input.Trim('-');
  return input;
}

public string RemoveAccents(string input)
{
  string normalized = input.Replace('ı', 'i').Normalize(NormalizationForm.FormKD);
  char[] array = new char[input.Length];
  int arrayIndex = 0;
  foreach (char c in normalized)
  {
    if (char.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)
    {
      array[arrayIndex] = c;
      arrayIndex++;
    }
  }
  return new string(array, 0, arrayIndex);
}

public string StripTags(string input)
{
  char[] array = new char[input.Length];
  int arrayIndex = 0;
  bool inside = false;

  for (int i = 0; i < input.Length; i++)
  {
    char let = input[i];
    if (let == '<')
    {
      inside = true;
      continue;
    }
    if (let == '>')
    {
      inside = false;
      continue;
    }
    if (!inside)
    {
      array[arrayIndex] = let;
      arrayIndex++;
    }
  }
  return new string(array, 0, arrayIndex);
}