MuhammedEminoğlu adlı üyeden alıntı
Hemen örnek üzerinde anlatalım Tayfun Erbilen kardeşimizin kodları üzerinden yürüyelim
/**
* @param $string
* @return mixed
*/
function permalink($string)
{
$find = array('Ç', 'Ş', 'Ğ', 'Ü', 'İ', 'Ö', 'ç', 'ş', 'ğ', 'ü', 'ö', 'ı', '+', '#');
$replace = array('c', 's', 'g', 'u', 'i', 'o', 'c', 's', 'g', 'u', 'o', 'i', 'plus', 'sharp');
$string = strtolower(str_replace($find, $replace, $string));
$string = preg_replace("@[^A-Za-z0-9\-_\.\+]@i", ' ', $string);
$string = trim(preg_replace('/\s+/', ' ', $string));
$string = str_replace(' ', '-', $string);
return $string;
}
// Kullanımı
$deger = "Bu Türkçe Bir Yazıdır";
echo permalink($deger);
şimdi function permalink fonksiyonunu inceleyelim. Bu fonksiyon $string parametresini almış. Yani bir değeri kontrol ederken kontrol edeceğimiz değer string fonksiyonuna atıyoruz.
fonksiyonun içini inceleyelim.
$find = array('Ç', 'Ş', 'Ğ', 'Ü', 'İ', 'Ö', 'ç', 'ş', 'ğ', 'ü', 'ö', 'ı', '+', '#');
diye değişken oluşturmuş, array yani dizi olarak belirlemiş ve dizinin elemanlarını atamış.
$replace = array('c', 's', 'g', 'u', 'i', 'o', 'c', 's', 'g', 'u', 'o', 'i', 'plus', 'sharp'); değişkenine de alternatif karakterler atanmış. Tabii buraya kadar hiçbir işlem yok henüz, sadece değişkenleri belirledik.
$string = strtolower(str_replace($find, $replace, $string)); değişkeni üzerinde strtolower fonksiyonu ana paranteze alınmış. Yani parantez içindeki değerlerin sonucuna bu fonksiyon uygulanacak. Peki bu fonksiyon ne yapar? Çok basit, bütün karakterleri küçük harfe çevirir. Ancak fonksiyonumuz henüz bitmedi, bir de parantez içerisinde str_replace fonksiyonu bulunuyor. str_replace 3 ayrı değişken alır. şöyle kullanılır.
str_replace("değişecek elemanlar", "yerine konacak elemanlar", "sonucun atanacağı değer"
şimdi biz ne yapıyoruz? değişecek elemana $find değişkenini atıyoruz, daha sonra yerine konacak elemanlar yerine $replace değişkenini atıyoruz. En son olarak değiştirilmiş değeri elimizde tutmak için $string değerine atıyoruz. yani bu satırda örnek olarak büyük Ç harfini küçük c harfine çevirmiş oluyoruz. Ancak işlemimiz devam ediyor.
şimdi şu satıra geldik
$string = preg_replace("@[^A-Za-z0-9\-_\.\+]@i", ' ', $string);
burada şunu sakın unutma. $string değerin artık düzenlemiş bir değer, yani örneğin büyük Ç harfi küçük c'ye çevrildi. Ancak bu sefer de preg_replace ile işlem yapacağız. preg_replace fonksiyonu özel karakterleri bulur. ve şu şekilde kullanılır.
preg_replace ("bulunacak özel karakterler", "bulunan özel karakterlerin değişeceği karakter", "sonucun atanacağı değişken")
Bu yukarıda özel karakterleri bulup " " boşluk ile değiştiriyoruz. ve string değerine atamış oluyoruz. Böylece türkçe karakter sorununu, büyük harf sorununu ve özel karakter sorununu hallettik. şimdi devam ediyoruz.
$string = str_replace(' ', '-', $string); bu satırda çok basit bir işlem yapıyoruz. Hani bir önceki satırda özel karakterlerin yerine boşluk koyduk ya, bu satırda da boşlukların yerine tire "-" işareti koyuyoruz. Neden? çünkü link yapısında boşluk olmaz :)
return $string; ifadesiyle de fonksiyonumuzu $string cinsinden döndürüyoruz. Yani string değerini birçok işleme tabi tuttuk ve tekrar derlenmiş halini fonksiyonumuzdan çıkarıyoruz.
Sen buraya bir string değer gönderdiğinde bu işlemlerden geçecek ve sağlıklı bir link yapısı oluşturabileceksin.
Umarım açıklayıcı olabilmişimdir.
Çok teşekkür ederim buradaki kodları kullandım ve bir arkadaş sağolsun yardımcı oldu sorunu çözdüm.
Elinize sağlık, saygılarımla.