URL Encode / Decode (Kodla-Çöz)

Metni URL'de güvenle kullanılacak şekilde yüzde-kodlayın veya kodlanmış bir URL'yi okunur metne çevirin — iki yön, siz yazarken canlı.

1.045 görüntülenme

Nasıl Çalışır

Bir URL yalnızca dar bir karakter kümesini güvenle taşıyabilir: harfler, rakamlar ve dört "ayrılmamış" (unreserved) sembol olan - _ . ~. Bunların dışındaki her karakter %XX üçlüsüne dönüştürülür; burada XX, karakterin bayt değerinin onaltılık gösterimidir — bu, RFC 3986 yüzde kodlama standardıdır. URL'nin yapısında özel anlamı olan karakterler de (? # / : @ & =, "ayrılmış" küme) bir değerin içinde göründüklerinde kodlanır, çünkü sorgu değerinin içindeki düz bir & aksi halde bir sonraki parametrenin başlangıcı sanılır.

ASCII-dışı metin karakter karakter değil, bayt bayt kodlanır: araç önce dizeyi UTF-8'e çevirir, sonra ortaya çıkan her baytı ayrı ayrı hex'ler. Türkçe "ç" harfi UTF-8'de iki bayttır (0xC3 0xA7), bu yüzden tek bir kod değil, iki ayrı yüzde bloğu olan %C3%A7 haline gelir. Somut bir örnek: İstanbul çayı & simit dizesi kodlandığında %C4%B0stanbul%20%C3%A7ay%C4%B1%20%26%20simit çıkar. Boşluğun %20, ayrılmış karakter &'nin %26 olduğuna ve her aksanlı harfin kendi çok baytlı dizisine açıldığına dikkat edin.

Pratikte bu ayrım en çok istekleri elle kurarken önem kazanır: birinin size gönderdiği bir sorgu değeri içeren webhook URL'sini yapıştırmak, bir pazarlama e-postasındaki takip parametresini çözmek veya bir API çağrısının neden başarısız olduğunu anlamaya çalışmak — çoğu zaman kodlanmamış bir & veya # bir değerin içine sızıp veri yerine ayırıcı olarak okunduğu için. Önce değeri kodlayıp sonucu URL şablonuna yerleştirmek, tam olarak bu tür hataları önler.

Bilinmesi Gerekenler

  • %20 mi + mi: RFC 3986 yüzde kodlaması boşluk için her zaman %20 kullanır. + kuralı ise farklı ve daha eski bir standarda aittir — bir HTML formunun veri gönderirken kullandığı application/x-www-form-urlencoded — ve yalnızca o gövde biçiminde geçerlidir; bir yol parçasında veya düzgün yüzde-kodlanmış bir sorgu değerinde asla. İkisini karıştırmak klasik bir hata kaynağıdır: form kodlaması bekleyen bir sunucu, yüzde-kodlu bir dizedeki başıboş bir +'yı boşluk değil düz artı işareti olarak okur.
  • Tüm URL'yi değil, tek bir bileşeni kodlayın: bu araç tek bir sorgu değeri veya yol parçası için tasarlanmıştır. Adresin tamamını (https:// dahil) kodlayıcıdan geçirmek, URL'yi geçerli kılan eğik çizgi ve iki noktaları da kaçışlar ve tamamen bozar.
  • Tarayıcınızla aynı motor: tarayıcının yerleşik encodeURIComponent/decodeURIComponent fonksiyonlarını çağırır; sonuçlar gerçek bir tarayıcının veya JavaScript fetch çağrısının üreteceğiyle birebir aynıdır — yaklaşıklık değildir.
  • Gidiş-dönüş kayıpsızdır: bir dizeyi kodlayıp ardından sonucu çözmek her zaman tam olarak orijinal baytları geri verir; bu da elle yapılan bir kodlama işini, sonucu çözüp kaynak metinle karşılaştırarak kolayca doğrulamanızı sağlar.
  • Hiçbir şey tarayıcınızdan çıkmaz: kodlama ve çözme tamamen istemci tarafında, anında ve yükleme yapılmadan çalışır.

Sıkça Sorulan Sorular

Boşluk neden + değil %20 oluyor?

Yüzde kodlama (RFC 3986) boşluk için %20 kullanır; + kuralı form gövdelerinde kullanılan eski application/x-www-form-urlencoded biçimine özgüdür, genel URL kodlaması değildir. Bu araç standart %20 biçimini kullanır — ikisini karıştırmak, sorgu dizelerini elle kurarken sık görülen bir hata kaynağıdır.

Tüm URL'yi mi yoksa yalnız bir parçayı mı kodluyor?

Tek bir bileşeni (sorgu değeri, yol parçası) kodlamak için tasarlanmıştır — "https://" dahil tüm URL'yi kodlamak eğik çizgileri de kaçışlar ve URL'yi bozar; yalnız ihtiyaç duyduğunuz parçayı kodlayın, sonra bu parçayı adresin geri kalanına yapıştırın.

Türkçe veya aksanlı harfler neden birden fazla %XX bloğuna dönüşüyor?

Çünkü kodlama görünen karakterler üzerinde değil, baytlar üzerinde çalışır. UTF-8, Türkçe ç, ğ, ı, ş gibi ASCII-dışı çoğu karakteri veya emojileri iki ila dört baytla temsil eder ve her bayt kendi %XX çiftini alır. Bu yüzden "ç" tek bir kod değil %C3%A7 (iki blok) olur; bir emoji kodlandığında sekiz karaktere veya daha fazlasına açılabilir.

Ayrılmış (reserved) ve ayrılmamış (unreserved) karakterler arasındaki fark nedir?

Ayrılmamış karakterler (harfler, rakamlar, - _ . ~) her zaman güvenlidir ve asla kodlanması gerekmez. Ayrılmış karakterlerin (? # / : @ & = ve birkaçı daha) URL içinde yapısal bir anlamı vardır — yolu sorgudan veya bir parametreyi diğerinden ayırırlar — bu yüzden yalnızca bir değerin içinde düz veri olarak göründüklerinde kodlanırlar, ayırıcı görevi görürken değil.

Metnim bir yere gönderiliyor mu?

Hayır — kodlama ve çözme tarayıcınızda anında olur; hiçbir veri sunucuya yüklenmez, bu yüzden hassas bir sorgu parametresini veya kişisel bir bilgiyi bile burada güvenle deneyebilirsiniz.

Yorumlar

Henüz yorum yok — ilk yorumu siz yazın!

Benzer Araçlar