URL kodlayıcı ve çözücü nasıl kullanılır
- Kodla veya Çöz seçeneğini seçin.
- Bir mod seçin: tek bir sorgu değeri veya yol parçası için bileşen ya da tam URL; ikincisi URL'nin yapısını (
:,/,?,&) bozmadan korur. - Metninizi veya URL'nizi yapıştırın ve sonucu kopyalayın.
Her şey tarayıcınızda işlenir. URL'ler sorgu dizelerinde sıklıkla belirteçler ve kişisel veriler taşır; bunların hiçbiri yüklenmez veya saklanmaz.
Yüzde kodlama nedir?
URL'ler yalnızca sınırlı bir ASCII karakter kümesi içerebilir. RFC 3986'da tanımlanan yüzde kodlama, diğer her baytı bir yüzde işareti ve ardından iki onaltılık rakamla gösterir. Metin önce UTF-8 baytlarına dönüştürülür, sonra kaçış gerektiren her bayt %XX olarak yazılır:
café & crème → caf%C3%A9%20%26%20cr%C3%A8me
Burada é iki UTF-8 baytıdır (C3 A9), boşluk %20, & işareti (ampersand) ise %26 olur.
Ayrılmış ve ayrılmamış karakterler
| Grup | Karakterler | Anlamı |
|---|---|---|
| Ayrılmamış | A–Z a–z 0–9 - . _ ~ | Kodlanmaları hiçbir zaman gerekmez. |
| Ayrılmış: gen-delims | : / ? # [ ] @ | URL'nin ana bölümlerini ayırır. |
| Ayrılmış: sub-delims | ! $ & ' ( ) * + , ; = | Bir bölüm içindeki veriyi sınırlar; örneğin sorgu dizelerindeki & ve =. |
Ayrılmış karakterler, sınırlayıcı olarak değil veri olarak göründüklerinde kodlanmalıdır. R&D araması q=R%26D olarak gönderilmelidir; aksi halde sunucu D adında ikinci bir parametre görür.
encodeURIComponent ve encodeURI karşılaştırması
JavaScript iki işlev sunar ve yanlış olanı seçmek sık görülen bir hata kaynağıdır:
encodeURIComponent(),A–Z a–z 0–9 - _ . ! ~ * ' ( )dışındaki her şeyi kodlar. Tek tek değerler için kullanın: sorgu parametreleri, yol parçaları, parça (fragment) verisi.encodeURI()ek olarak; , / ? : @ & = + $ #karakterlerine dokunmaz; bu yüzden yapısını bozmadan tam bir URL'ye uygulanabilir.&veya#içeren bir değeri korumaz.
encodeURI("https://example.com/a b?q=R&D")
// "https://example.com/a%20b?q=R&D" (& left alone)
"https://example.com/search?q=" + encodeURIComponent("R&D")
// "https://example.com/search?q=R%26D"
Daha da iyisi, sorgu dizelerini sizin için URLSearchParams veya kullandığınız dilin URL kütüphanesi oluştursun.
Yaygın tuzaklar
+ ve %20 farkı
application/x-www-form-urlencoded olarak gönderilen HTML formları boşluğu + olarak kodlar. RFC 3986 URL'lerinde + düz bir artı işaretidir ve boşluk %20'dir. Hangi kuralın kullanıldığını bilmeyen bir çözücü C++'yı C yapabilir veya boşlukların yerine + bırakabilir. Sorun yaşamamak için gerçek bir artı işaretini %2B olarak kodlayın.
Python: urllib.parse.quote("a b&c") → a%20b%26c
urllib.parse.quote_plus("a b&c") → a+b%26c
Çift kodlama
Zaten kodlanmış bir dizeyi yeniden kodlamak yüzde işaretlerinin kendisini kaçırır: %20, %2520 olur. Bu genellikle bir değer önce kodunuz, sonra da bir çerçeve veya HTTP istemcisi tarafından kodlandığında olur. Bir URL'de %25 görürseniz çift kodlamadan şüphelenin. İki kez çözmek de aynı derecede zararlıdır: kullanıcı verisindeki düz bir %41'i A'ya çevirebilir.
Tüm URL'yi bileşen olarak kodlamak
Tam bir URL üzerinde encodeURIComponent çalıştırmak :// ve her / karakterini kaçırır ve https%3A%2F%2F... üretir. Bu yalnızca URL'nin kendisi bir parametre değeri olduğunda, örneğin bir redirect_uri olarak doğrudur.
İpuçları
- Yüzde kodlamalardaki onaltılık rakamlar büyük/küçük harfe duyarsızdır, ancak RFC 3986 büyük harfi önerir (
%2fdeğil,%2F). - Uluslararası alan adları yüzde kodlanmaz; bunun yerine Punycode (
xn--) kullanırlar. - Bir URL içinde ikili veri mi taşımanız gerekiyor? URL güvenli Base64, her baytı yüzde kodlamaktan daha kompakttır.
- Bir sunucunun kodlanmış isteğinizi nasıl ele aldığını HTTP başlık kontrolü ile inceleyin.
Sık sorulan sorular
Boşluk neden bazen + bazen %20 oluyor?
+, sorgu dizelerinde ve POST gövdelerinde kullanılan HTML form kodlamasından gelir; %20 ise bir URL'nin her yerinde geçerli olan genel RFC 3986 kodlamasıdır. Şüphede kalırsanız %20 kullanın.
Hangi karakterlerin kodlanması hiçbir zaman gerekmez?
Ayrılmamış küme: harfler, rakamlar, kısa çizgi, nokta, alt çizgi ve tilde (~). Bir değerin parçası olduklarında diğer her şey kodlanmalıdır.
URL kodlama bir güvenlik önlemi mi?
Hayır. Yalnızca veriyi bir URL içinde sözdizimsel olarak güvenli kılar ve tamamen geri döndürülebilir. Veriyi gizlemez ve tek başına enjeksiyonu önlemez.
%uXXXX dizileri içeren bir URL'yi nasıl çözerim?
%uXXXX, kullanımdan kaldırılmış JavaScript escape() işlevinin ürettiği standart dışı bir biçimdir. Standart çözücüler onu reddeder; ayrı olarak dönüştürülmesi gerekir.
Güncellendi