URL Encode / Decode (Yüzde Kodlama)

URL kodlamada (percent-encoding) harf, rakam ve - . _ ~ dışındaki her bayt % ve iki onaltılık haneyle yazılır. Türkçe karakterler önce UTF-8 baytlarına çevrilir: ş iki bayttır ve %C5%9F olur, boşluk %20 olur. Form verisinde boşluk + ile yazılır.

Son güncelleme: · Yazılım ve bilişim hesaplamaları

Hesaplama formu

İşlemi ve kodlama türünü seç, metni yapıştır.

En fazla 2000 karakter. Çözme işleminde %C5%9F gibi yüzde kodlu metni yapıştır.

Ne hesaplaman gerektiğinden emin değil misin? Hesap asistanına sor, uygun hesaplayıcıyı birlikte bulalım.

Sonucun burada görünecek

Soldaki formu doldurup Hesapla'ya bas; ana sonuç, dağılım ve adım adım hesap burada açılır.

Örnek: Kodlanmış metin %C5%9Fehir%20merkezi%2F%C4%B0stanbul%3F Örneği incele

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.

Örnek hesap adımları
AdımHesapDeğer
UTF-8metin önce UTF-8 baytlarına çevrilir (ş → C5 9F)
RFC 3986A-Z a-z 0-9 - . _ ~ dışındaki her bayt %HH olur
Kodlanmış metin%C5%9Fehir%20merkezi%2F%C4%B0stanbul%3F

Kaynaklar

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.