Kodlanmış Sonuç
Giriş search query=hello world&category=café & résumé&redirect=https://example.com/path?id=42 şu şekilde kodlanır:
search%20query%3Dhello%20world%26category%3Dcaf%C3%A9%20%26%20r%C3%A9sum%C3%A9%26redirect%3Dhttps%3A%2F%2Fexample.com%2Fpath%3Fid%3D42
Ayrılmamış karakterler (A-Z a-z 0-9 - _ . ~) dışındaki her karakter yüzde kodlu formuyla değiştirilmiştir.
Yüzde Kodlaması (RFC 3986)
RFC 3986’ya göre, ayrılmamış karakter olmayan herhangi bir bayt, o baytın değerini temsil eden yüzde işareti ve iki büyük harf onaltılık basamak olarak kodlanır.
Asla kodlanması gerekmeyen ayrılmamış karakterler:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 - _ . ~
Özel Karakterler URL’leri Neden Bozar
Bir URL’nin tanımlanmış sözdizimi vardır. ?, &, =, #, / ve : karakterlerinin her birinin URL yapısında belirli rolleri vardır:
?yolu sorgu dizesinden ayırır&sorgu parametrelerini birbirinden ayırır=parametre anahtarını değerinden ayırır#parça tanımlayıcısını başlatır/yol bölümlerini ayırır:şemayı geri kalandan ayırır
encodeURI vs encodeURIComponent
encodeURI("https://example.com/search?q=hello world")
// "https://example.com/search?q=hello%20world"
// ? ve = kodlanmaz
encodeURIComponent("hello world&goodbye=world")
// "hello%20world%26goodbye%3Dworld"
// & ve = kodlanır
Sorgu dizeleri oluşturmak için her zaman encodeURIComponent kullanın:
const params = {
q: "café & résumé",
redirect: "https://example.com/path?id=42"
};
const queryString = Object.entries(params)
.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)
.join("&");
+ vs %20 Boşluk Tartışması
- RFC 3986 (URI): Boşluk ->
%20 - HTML form kodlaması (application/x-www-form-urlencoded): Boşluk ->
+
Python’da fark açıktır:
from urllib.parse import quote, quote_plus
quote("hello world") # "hello%20world"
quote_plus("hello world") # "hello+world"
Yaygın Hatalar
Parametre değerleri yerine tam URL’yi kodlama
encodeURIComponent’e https://example.com/path?q=hello geçirirseniz, iki nokta üst üste, eğik çizgiler ve soru işaretinin tümü kodlanır.
Parametre anahtarlarını kodlamayı unutma
Anahtarlar da kullanıcı girişinden geliyorsa özel karakterler içerebilir. Hem anahtarları hem de değerleri kodlayın.
Çift kodlama
Zaten URL kodlu bir string alıp tekrar kodlarsanız, her %, %25 olur.