Bir Stringi akıllı URL ye dönüştürme
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:
- uzunluğu 80 karakter ile sınırladık.
- ş » s, ğ » g, vb. dönüşümleri yaptık.
- a-z, A-Z, 0-9, - ve _ haricindeki tüm karakterleri - ile değiştirdik.
- (ihtimal dahilindedir) yanyana -- oluşursa tek - ile değiştirdik.
- 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..
#string #smart-url #akıllı-url #ToURL
<System.Runtime.CompilerServices.Extension> _
studio da yanlış olarak gözüküyor bu tanımlama olmadığı için de BC30456: `ToURL`, `String` üyesi değil. hatası alıyorum yardımcı olabilir misiniz ? çok teşekkür ederim
bu sayfaya bir göz atar mısınız?
sendeki hata mesajı sanki sınıfı sen bir class içerisine yazmışsın gibi.
public class Class1
{
public static class DA
...
gibi.
Class1 altına yazmamalısın...
Ben .cs dosyasına yazdım ve şöyle bir hata aldım.`Genişletme yöntemleri en üst bir static sınıfta tanınmalıdır.DA iç içe yerleştirilmiş bir bir sınıftır`
Yardımcı olursanız sevinirim.
saygılarımla...