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
Çözülemedi — geçersiz yüzde kodlama dizisi.
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
%20kullanı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/decodeURIComponentfonksiyonlarını çağırır; sonuçlar gerçek bir tarayıcının veya JavaScriptfetchç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.
Benzer Araçlar
Sorun Bildir
URL Encode / Decode (Kodla-Çöz)
Yorumlar
Henüz yorum yok — ilk yorumu siz yazın!