Skip to content

Glossary

Yüzde kodlama

URL'lerdeki %XX kaçış mekanizması

By Published Updated

Yüzde kodlama (ayrıca URL kodlama olarak da bilinir), URL'lerin URL grameri açısından geçersiz olan ya da ayrılmış anlamlara sahip bulunan karakterleri temsil etmek için kullandığı mekanizmadır. RFC 3986 §2'de tanımlanmıştır.

Şema şu şekilde çalışır: kaçırılacak her bayt, o baytın değerini temsil eden iki onaltılık basamaktan önce gelen % işaretiyle yazılır. Boşluk %20, soru işareti %3F, eğik çizgi %2F, diyez işareti ise %23 olur.

ASCII dışı karakterler (umlauts, aksanlar, CJK, emoji) için önce karakter UTF-8 ile bir bayt dizisine dönüştürülür, ardından her bayt yüzde kodlanır. "é" karakteri (U+00E9), UTF-8'de 0xC3 0xA9 baytlarına karşılık gelir; yüzde kodlanmış hali %C3%A9'dir.

Bilinmesi gereken üç karakter sınıfı:

  • Ayrılmamış — A-Z, a-z, 0-9 ve -_.~. Hiçbir zaman kaçırılmaz.
  • Ayrılmış — söz dizimsel anlamı olan karakterler (:/?#[]@!$'()*+,;=). URL söz dizimi olarak ayrıştırılmaması gereken verilerde göründüklerinde kaçırılır.
  • Diğer — geri kalan her şey (boşluklar, ASCII dışı karakterler, kontrol karakterleri). Her zaman kaçırılır.

Herhangi bir dizeyi URL'de güvenli kullanım için kodlamak ya da geri çözmek için URL kodlayıcımızı kullanın; bu araç UTF-8'i doğru biçimde işler (bazı eski uygulamalar dizeleri ISO-8859-1 olarak değerlendirip aynı girdiden farklı çıktılar üretebilir).

Boşluk-artı notu: bir URL'nin yol ve parçasında boşluk %20 olarak kodlanır. Ancak application/x-www-form-urlencoded gövdesinin sorgu dizesinde boşluklar + olarak kodlanır; bu, modern URL belirtiminden önce gelen forma özgü bir gelenektir. JavaScript'in encodeURIComponent() işlevi her zaman %20 üretir; eski escape() (artık kullanım dışı) ise + üretirdi. Form gönderimleri ve çoğu URL kitaplığı için her iki gösterim de bir boşluğa doğru çözülür; ancak bunları elle oluşturulmuş bir URL'de karıştırmak dizge eşitlik denetimlerini bozar. Modern öneri: standart URL API'lerini (tarayıcılarda WHATWG URLSearchParams, Node'da url.URL) kullanın ve uygulamanın bağlam için doğru kodlamayı seçmesine izin verin.

Çift kodlama — en yaygın üretim hatası: bir değer, araya giren bir çözücü olmadan iki kodlayıcıdan geçerse ilk geçişten gelen özgün % işareti %25 haline gelir ve kullanıcı %20 yerine %2520 gibi anlamsız metinler görür. Kök neden neredeyse her zaman sistemin bir katmanının, girdinin zaten URL kodlanmış olmasına rağmen düz metin olduğunu varsaymasıdır. Çözüm, net bir sınır çizmektir: URL oluşturucuya kadar girdi düz metin, yalnızca URL biçiminde yüzde kodlanmış, URL bağlamından çıkar çıkmaz tekrar düz metne çözülmüş. İlgili: UTF-8, ASCII. Kaynak: RFC 3986 §2.1 — Yüzde Kodlama.

Çözümlü örnek

café & thé arama sorgusunu URL sorgu dizesine kodlayın. Birinci adım — her karakteri UTF-8'e çevirin: c a f é <boşluk> & <boşluk> t h é, 63 61 66 C3 A9 20 26 20 74 68 C3 A9 baytlarına dönüşür. İkinci adım — yüzde kodlama kurallarını uygulayın: ayrılmamış karakterler (c a f t h) olduğu gibi kalır; çok baytlı UTF-8 dizileri ve ayrılmış karakterler (&) kaçırılır. Sonuç: caf%C3%A9%20%26%20th%C3%A9. Tam URL: https://example.com/search?q=caf%C3%A9%20%26%20th%C3%A9. Alıcı tarafta sunucu, her iki adımı tersine çevirerek çözer: her %XX'i bayt değeriyle değiştirip UTF-8 baytlarını elde edin, ardından café & thé'yi kurtarmak için UTF-8'i çözümleyin. Sunucu baytları UTF-8 yerine Latin-1 olarak işlerse "café" yerine "café" gelir — klasik mojibake durumu budur.

Ne zaman ve neden önem taşır

Dize birleştirme yoluyla oluşturulan her URL, potansiyel bir enjeksiyon ya da yönlendirme hatasıdır. Bir URL'ye ham biçimde gömülen ../../../etc/passwd gibi kullanıcı tarafından sağlanan bir dosya adı, yol geçişi girişimine dönüşür; ..%2F..%2F..%2Fetc%2Fpasswd olarak yüzde kodlandığında tek bir segment olarak güvenlidir, ancak yanlış katmanda çözümlenirse yeniden yol geçişine yol açabilir. İçinde & veya # bulunan arama sorguları, kodlanmadan sessiz sedasız kesilebilir. Modern HTTP çerçeveleri (Express, FastAPI, ASP.NET), sorgu parametre oluşturucularını kullandığınızda bunu otomatik olarak yönetir; hatalar genellikle geliştiricilerin dize birleştirdiği elle oluşturulmuş yönlendirme URL'lerinde, günlük korelasyon kimliklerinde ve imzalı URL oluşturucularda kümelenir. Savunmacı alışkanlık: bir URL oluştururken dize birleştirme için asla + kullanmayın; her zaman URLSearchParams'a veya çerçevenizin eşdeğerine gidin. Kaynak: WHATWG URL Standardı — Yüzde kodlanmış baytlar.

Hesaplayıcıyı deneyin

Bir dizeyi URL'de güvenli kullanım için yüzde kodlayın ya da kodlamayı tersine çevirerek okuyun.

URL kodlayıcıyı açın →

Frequently asked questions

Yüzde kodlama nedir?
Yüzde kodlama (URL kodlama), RFC 3986 ile tanımlanan ve ayrılmış, güvensiz ya da ASCII dışı karakterleri URL'de bir yüzde işaretinin ardından iki onaltılık basamak gelecek şekilde temsil eden şemadır. Örneğin boşluk karakteri %20 olur.
Yüzde kodlama pratikte ne zaman uygulanır?
Tarayıcılar bir URL oluştururken boşluk, &, = ve ASCII dışı harfler gibi karakterleri otomatik olarak yüzde kodlar. Form gönderimleri, sunucunun anahtar-değer çiftlerini belirsizlik olmadan ayrıştırabilmesi için sorgu dizesini kodlar (= için %3D, & için %26).
Yüzde kodlama ile Base64 kodlama arasındaki fark nedir?
Yüzde kodlama, URL'de yasadışı ya da ayrılmış olan tek tek karakterleri kaçırırken geri kalanları olduğu gibi bırakır; büyük ölçüde ASCII girdiler için boyut açısından verimlidir. Base64 ise rastgele ikili veriyi güvenli 64 karakterlik bir alfabeye kodlar ancak boyutu yaklaşık %33 artırır; bu da çoğu durumda URL'ler için uygun değildir.

Related

Published May 16, 2026 · Last reviewed May 31, 2026