Türkçe'deki noktasız "ı" ve noktalı "İ" farkı, İngilizce kodla yazılmış birçok URL işleyicisinde küçük harfe çevirme hatalarına yol açar — bir slug'ın neden beklenmedik şekilde eşleşmediğini anlamak için URL'yi parçalarına ayırmak iyi bir başlangıç noktasıdır.
Bir URL'nin ana parçaları
- Şema —
https://, kaynağa nasıl bağlanılacağını tanımlar. - Host —
ornek.com.tr, sunucunun alan adı. - Port — isteğe bağlı, HTTPS için varsayılan 443.
- Yol —
/haberler/istanbul, Türkçe'ye özgü harfler (ı, ş, ğ, ü, ö, ç) içerebilir. - Sorgu dizesi —
?'den sonra, genellikleutm_sourcegibi kampanya parametreleri. - Parça (hash) —
#'den sonra, yalnızca tarayıcı tarafından işlenir.
"İstanbul" küçük harfe çevrilince neden "istanbul" olmuyor
Türkçe'de büyük "I"nın küçük hâli noktasız "ı", büyük "İ"nin küçük hâli ise noktalı "i"dir — ama çoğu programlama dili varsayılan olarak İngilizce kurallarla çalışır ve "I".toLowerCase() sonucunu her zaman "i" olarak üretir. Bir URL slug'ı sunucu tarafında Türkçe yerel ayar (locale) olmadan küçük harfe çevrilirse, "İstanbul" beklenmedik şekilde "i̇stanbul" gibi garip bir sonuca dönüşebilir — bu da linklerin neden bozulduğunu araştırırken akla gelmesi gereken ilk ihtimallerden biridir.
Türkçe karakterlerin yol kısmında yer kaplaması
ı, ş, ğ, ü, ö, ç gibi Türkçe'ye özgü harfler URL için güvenli karakter kümesinde yer almaz; her biri önce birkaç UTF-8 baytına, ardından %C4%B1 gibi yüzde işaretli dizilere kodlanır. Sonuç olarak Türkçe bir kelime, kodlandığında göründüğünden çok daha uzun bir dize hâline gelir — bu da WhatsApp'ta paylaşılan bağlantıların neden bu kadar uzun göründüğünü açıklar.
Bu neden gereklidir
- Hata ayıklama veya loglama için karmaşık bir URL'yi bileşenlerine ayırmak.
- Bir slug'ın neden beklenen sayfayla eşleşmediğini anlamak.
- Kodlama hataları olmadan programatik olarak doğru bir URL oluşturmak.
userinfo ile yapılan phishing hilesi
https://accounts.google.com@evil.com/ gibi bir URL, accounts.google.com'a gidiyormuş gibi görünür, ama aslında tarayıcı evil.com'u açar — @ işaretinden önceki kısım sadece bir kullanıcı adıdır (userinfo), host değildir. Bu yüzden modern tarayıcılar gerçek host'u görsel olarak vurgulamaya çalışır.