Türkçe karakterlerle URL slug üretmenin doğru yolu
Strtolower yerine Türkçe harf haritası kullanmak slug'ı bozar. Küçük harfe çevirme adımının harita dönüşümünden önce gelmesi gerekiyor.
Bir başlıktan URL üretirken en sık yapılan hata, doğrudan küçük harfe çevirmektir. PHP'nin yerel olmayan strtolower fonksiyonu Türkçe büyük harfleri doğru dönüştürmez.
Sorun
İ harfi düzgün işlenmediğinde ı değil i olur; I harfi ise ı olması gerekirken i olur. Sonuçta hem başlık hem slug yanlış çıkar.
Doğru sıra
1. Önce mb_strtolower ile Türkçe destekli küçültme yapılır
2. Sonra özel harf haritasıyla ç→c, ğ→g, ı→i, ö→o, ş→s, ü→u çevrilir
3. Ardından kalan geçersiz karakterler tireye indirgenir
``php``
$metin = mb_strtolower(trim($metin), 'UTF-8');
$metin = strtr($metin, ['ç' => 'c', 'ğ' => 'g', 'ı' => 'i']);
$metin = preg_replace('/[^a-z0-9]+/u', '-', $metin);
Sıra ters çevrilirseışıkkelimesiışkya daiskgibi bozuk bir sonuç verir.
Benzersizlik
Aynı isimli iki içerik üretilirse sona -2, -3 gibi bir ek getirmek gerekir. Mevcut kayıtlar arasında dolaşarak çakışmayı çözmek, yayın sonrası 404 riskini ortadan kaldırır.