Bir Stringi akıllı URL ye dönüştürme

Elimizdeki bir stringi akıllı URL ye dönüştürmenin kolay yolunu bu yazıda bulabilirsiniz.

Son zamanların meşhur tekniklerinden birisi de malumunuz olduğu üzere akıllı URL ler kullanmak.

Örnek olarak bu sayfanın adres satırına bakabilirsiniz:

http://www.daltinkurt.com/DevrimAltinkurt/CMS/Icerik/149/Tam-ekran-iframe.aspx

Temel olarak amacımız;

  • URL lerimizin sadece a-z, A-Z, 0-9, - (tire) ve _ (alt çizgi) karakterlerinden oluşmasını sağlamak,
  • bunların haricinde kalan karakterlerin yerine bir ufak - (tire) yerleştirmek,
  • ş » s, ü » u, vb. gibi alfabemize özgü karakterleri ingiliz alfabesindeki karakterlerden uygun olanına dönüştürmek.

Örnekle izah etmeye çalışalım. Akıllı URL kullanan haber sitelerinde genellikle haberin başlığı url de yer alır.

http://istanbul.meb.gov.tr/IcerikDetay/1741/Sinirlar-Egitimle-Birlesiyor.aspx de olduğu gibi.

Biz de elimizdeki bir stringi akıllı URL ler için temizleyen/hazırlayan bir metod yazalım o halde:

Bu iş için güzel bir genişletme metodu yazalım. (Extension method)

public static class DA
{
public static string ToURL(this string s)
{
    if (string.IsNullOrEmpty(s)) return "";
    if (s.Length > 80)
        s = s.Substring(0, 80);
    s = s.Replace("ş", "s");
    s = s.Replace("Ş", "S");
    s = s.Replace("ğ", "g");
    s = s.Replace("Ğ", "G");
    s = s.Replace("İ", "I");
    s = s.Replace("ı", "i");
    s = s.Replace("ç", "c");
    s = s.Replace("Ç", "C");
    s = s.Replace("ö", "o");
    s = s.Replace("Ö", "O");
    s = s.Replace("ü", "u");
    s = s.Replace("Ü", "U");
    s = s.Replace("'", "");
    s = s.Replace("\"", "");
    Regex r = new Regex("[^a-zA-Z0-9_-]");
    //if (r.IsMatch(s))
    s = r.Replace(s, "-");
    if (!string.IsNullOrEmpty(s))
        while (s.IndexOf("--") > -1)
            s = s.Replace("--", "-");
    if (s.StartsWith("-")) s = s.Substring(1);
    if (s.EndsWith("-")) s = s.Substring(0, s.Length - 1);
    return s;
}
}

metotta yaptığımız işi özetleyelim:

  1. uzunluğu 80 karakter ile sınırladık.
  2. ş » s, ğ » g, vb. dönüşümleri yaptık.
  3. a-z, A-Z, 0-9, - ve _ haricindeki tüm karakterleri - ile değiştirdik.
  4. (ihtimal dahilindedir) yanyana -- oluşursa tek - ile değiştirdik.
  5. baştaki ve sondaki fazlalık - yi temizledik.

Kullanımı da son derece kolay:

string baslik = "C# ve Java karşılaştırması";
string url = baslik.ToURL();

Oluşan url: "C-ve-Java-karsilastirmasi"

baslik.ToURL() yi nasıl yazabildiğimizin sırrını bir başka yazıda anlatmak isterim, ama kısaca söylemek gerekirse, static bir class içerisinde static bir metot yazıyoruz. Bu metodun ilk parametresinde hangi tipteki değişkenler/nesneler için kullanacağımızı belirtiyoruz. Sonra da sanki .net framework ü ile beraber gelen bir metotmuş gibi kullanabiliyoruz.

Eğer DataList, Repeater, GridView ile kullanmak isterseniz, şu şekilde kullanabilirsiniz:

<asp:DataList ID="dlHaberler" runat="server" >
<ItemTemplate>
<asp:HyperLink ID="hlBaslik" runat="server" 
  NavigateUrl='<%#string.Format("/Haber/{0}/{1}.aspx",Eval("Id"),Eval("Baslik").ToString().ToURL()) %>'>
</ItemTemplate>
</asp:DataList>

Bu konu ile ilgili 2. bir yazı daha (belki 3. sü de olacak) yazacağım.

Herkese kolaylıklar diliyorum..