URL kodlama nasıl yapılır?
URL'lerde yalnızca sınırlı bir ASCII karakter kümesi doğrudan kullanılabilir. RFC 3986'ya göre harfler, rakamlar ve - . _ ~ işaretleri ayrılmamış karakterlerdir ve olduğu gibi kalır.
Diğer her karakter önce UTF-8 baytlarına çevrilir. Her bayt % işareti ve iki onaltılık haneyle yazılır: boşluk %20, / işareti %2F, ğ (C4 9F) %C4%9F olur.
HTML formları ve sorgu dizgeleri application/x-www-form-urlencoded biçimini kullanır. Burada boşluk + olarak yazılır ve * işareti de olduğu gibi kalır.
Çözme işleminde %HH dizileri bayta döner, baytlar UTF-8 olarak okunur. Form türünde + boşluğa çevrilir. Geçersiz bir yüzde dizisi ya da UTF-8 olmayan bayt varsa hesaplayıcı hata verir.
Formül
- Kodlama
ayrılmamış karakter → aynen; diğer her UTF-8 baytı → %HH- Ayrılmamış küme (RFC 3986)
A-Z a-z 0-9 - . _ ~- Form verisi
boşluk → +, A-Z a-z 0-9 * - . _ aynen
Örnek hesap
Aşağıdaki örnek, şu değerlerle (İşlem: Kodla (encode), Kodlama türü: URL bileşeni (RFC 3986, boşluk = %20), Metin: şehir merkezi/İstanbul?) hesaplayıcının kendisiyle hesaplanmıştır.
| Adım | Hesap | Değer |
|---|---|---|
| UTF-8 | metin önce UTF-8 baytlarına çevrilir (ş → C5 9F) | |
| RFC 3986 | A-Z a-z 0-9 - . _ ~ dışındaki her bayt %HH olur | |
| Kodlanmış metin | %C5%9Fehir%20merkezi%2F%C4%B0stanbul%3F |
Kaynaklar
- IETF RFC 3986 — URI genel sözdizimi, yüzde kodlama (§2.1-2.4) (erişim 31.10.2026)
- WHATWG URL Standard — application/x-www-form-urlencoded (erişim 31.10.2026)
- IETF RFC 3629 — UTF-8 dönüşüm biçimi (erişim 31.10.2026)
Son güncelleme: (içerik ya da kullanılan verinin son değiştiği ya da kontrol edildiği tarih).
Hesaba katılmayanlar
- Bütün bir URL'yi yapısını bozmadan kodlamaz; / ? # & gibi ayırıcılar da kodlanır. Bir URL'nin yalnızca parametre değerini ya da yol parçasını kodlamak için kullan.
- Alan adındaki Türkçe karakterler (IDN) yüzde kodlamayla değil Punycode (xn--) ile yazılır; bu dönüşüm yapılmaz.
- Girdi en fazla 2000 karakterdir; işlem tarayıcında yapılır, metin sunucuya gönderilmez.
Sıkça sorulan sorular
%20 ile + arasındaki fark nedir?
İkisi de boşluktur ama farklı bağlamlarda. URL yolunda boşluk %20 olarak yazılır. Form verisi ve sorgu dizgesinde (application/x-www-form-urlencoded) boşluk + olarak yazılabilir. Yolda + işareti boşluk anlamına gelmez.
Türkçe karakterler URL'de nasıl yazılır?
UTF-8 baytlarının yüzde kodlamasıyla: ç %C3%A7, ğ %C4%9F, ı %C4%B1, ö %C3%B6, ş %C5%9F, ü %C3%BC. Tarayıcı adres çubuğunda bunları okunur gösterebilir ama arka planda kodlanmış hâli gönderilir.
encodeURIComponent ile bu hesaplayıcı aynı sonucu verir mi?
Neredeyse aynı. JavaScript'in encodeURIComponent işlevi ! ' ( ) * karakterlerini kodlamaz; RFC 3986 türü bunları da kodlar. Bu karakterler ayırıcı olarak kullanılabildiği için kodlamak daha güvenlidir.
Çözerken neden "geçerli UTF-8 değil" hatası alıyorum?
Metin eski bir sistemde Latin-5 (ISO-8859-9) ya da Windows-1254 ile kodlanmış olabilir. Örneğin ş bu kodlamalarda tek bayttır (%FE) ve UTF-8 olarak çözülemez.