Türkçeye özgü harfler — ç ğ ı İ ö ş ü — Latin alfabesinin temel setinde yok, bu yüzden bir arama sorgusunda ya da ürün adında geçtiklerinde percent-encoding ile %XX dizilerine dönüştürülmeleri gerekir.
"İstanbul" neden koda dönüşünce uzuyor
Türkçeye özgü her harf önce UTF-8 baytlarına çevrilir (çoğu 2 bayt), sonra her bayt %XX olarak yazılır — ş harfi %C5%9F olur. Ayrıca büyük/küçük harf dönüşümünde klasik bir tuzak var: Türkçe yerelinde i harfinin büyüğü İ, I harfinin küçüğü ise ı'dır — kodu İngilizce varsayımıyla yazan bir script, encode etmeden önce metni büyük/küçük harfe çevirirken sessizce yanlış karaktere dönüştürebilir.
encodeURIComponent ve encodeURI farkı
encodeURIComponent, &, ?, =, / dahil yapısal anlamı olan neredeyse tüm karakterleri kodlar; bu yüzden ?q= içine giden tek bir arama teriminde kullanılır. encodeURI bu yapısal karakterlere dokunmaz, çünkü zaten oluşturulmuş bir URL'nin tamamını kodlamak için tasarlanmıştır.
Sık yapılan bir hata
Sorgu dizesinin tamamı tek seferde encodeURIComponent ile kodlanırsa, parametreleri ayıran & ve = işaretleri de %26 ve %3D'ye dönüşür — sunucu birden fazla parametre yerine tek, okunamayan bir parametre alır. Her değer ayrı ayrı kodlanmalıdır.
Ne zaman gerekir
- Türkçeye özgü harfler içeren bir arama terimini veya ürün adını parametreye eklerken.
- Dinamik değerler (arama terimi, kimlik) içeren bağlantılar oluştururken.
- Hata ayıklama: bir URL'yi çözerek içine gerçekte ne kodlandığını görmek için.
Uç durum: çift kodlama
Zaten kodlanmış bir dize yanlışlıkla tekrar kodlanırsa, % işaretinin kendisi %25'e dönüşür ve sonuç okunamayan çift kodlu bir metne döner (%C5%9F yerine %25C5%259F). Bu genellikle bir framework URL'yi zaten otomatik kodlarken, geliştiricinin aynı değer üzerinde tekrar manuel olarak encodeURIComponent çağırmasıyla olur.