← Tüm araçlar

URL Kodlama ve Çözme

URL'leri ve metni tarayıcınızda yüzde kodlayın ve çözün. Ayrılmış karakterleri, encodeURI ve encodeURIComponent farkını yerel işlemle anlayın.

Geliştiriciler İçin URL Kodlama ve Çözme

Bir URL'ye boşluk yazın, Kiril alfabesiyle bir kelime yazın ya da adresin kendisine değil de verinize ait bir ve işareti ekleyin; mutlaka bir şeyin değişmesi gerekir. Web, yalnızca küçük ve öngörülebilir bir ASCII karakter kümesi için güvenli aktarım garanti eder. Diğer her şey, yönlendiricilerin, sunucuların ve tarayıcıların üzerinde mutabık kaldığı bir formata sarılmak zorundadır. Bu format, daha yaygın olarak URL kodlama denen yüzde kodlamadır; bu sayfa ise metni iki yönde de doğrudan tarayıcınızda dönüştürmenizi sağlar.

Koyu indigo arka planda glowing bir URL yolunun yüzde kodlanmış onaltılık karakterlere dönüşmesi
Bir URL yolunun güvenli yüzde kodlamalı üçlülere dönüşümü.

Yüzde kodlama gerçekte nedir?

Kural mekaniktir ve izlemesi kolaydır. Tam olarak görünemeyecek herhangi bir karakter, o karakterin bayt değerini belirten iki onaltılık basamaktan oluşan bir % işaretiyle değiştirilir. Boşluk %20 olur. Artı işareti %2B olur. Numara işareti %23 olur. Bir karakter, çoğu ASCII dışı metnin UTF-8 altında olduğu gibi birkaç bayta eşlendiğinde, art arda birkaç üçlü elde edersiniz: euro işareti %E2%82%AC'a dönüşür. Kod çözme süreci tersine çalışır ve her üçlüyü orijinal baytına geri okur.

Bu kural, URI spesifikasyonunda (RFC 3986) tanımlanmıştır ve kasıtlı olarak sıkıcıdır. Sıkıcı olmak amacın kendisidir. Dünyadaki her düzgün davranan HTTP istemcisi ve sunucusu aynı kuralları uygular; dolayısıyla bir yerde doğru şekilde kodlanmış bir bağlantı her yerde sağlam ulaşır.

Neden var olması gerekiyor?

URL'ler çok farklı işlevleri olan iki tür karakter taşır. /, ?, #, &, = ve : gibi ayrılmış karakterler yapısaldır. Bir ayrıştırıcıya yolun nerede bitip sorgu dizesinin nerede başladığını ya da bir parametrenin nerede durup diğerinin nerede başladığını söyler. Gerçek veriniz bu sembollerden birini içeriyorsa, ayrıştırıcının onu noktalama işareti olarak yorumlamaması için kodlanması gerekir. A&B/2024 gibi bir sipariş referansı ham olarak bir sorgu dizesine bırakılırsa iki parametre ve bir yol segmenti olarak yanlış okunur.

Bir de güvenli olmayan ve ASCII dışı karakterler vardır: boşluklar, tırnak işaretleri, köşeli parantezler, vurgulu harfler, emoji ve düz ASCII aralığının dışındaki her şey. Bunlar ya aktarım sırasında bozulduğu ya da tanımlı bir temsilleri olmadığı için bir URL'de tam anlamıyla yer alamaz. Bunları kodlamak, sonucu şansa bırakmak yerine bağlantıları temiz ve öngörülebilir tutar.

Gerçek çalışmada nerede karşılaşılır?

Sorgu dizeleri klasik durumdur. ?key=...'ye eklediğiniz her değer, kullanıcı girdisinin yapıyı bozamaması için kodlanmalıdır. Aynı durum application/x-www-form-urlencoded olarak gönderilen HTML form gönderimleri için de geçerlidir; burada tarayıcı alan değerlerini otomatik olarak kodlar (ve tarihsel bir kural olarak boşlukları %20 yerine +'ya çevirir). Latin dışı başlıklara işaret eden bağlantılar oluştururken, API isteklerini elle oluştururken, yönlendirme hedeflerini parametre olarak geçirirken ve adres çubuğunda sorunsuz görünen bir isteğin sunucuya neden bozuk geldiğini hata ayıklarken de bununla karşılaşırsınız.

URL kodlamayı simgeleyen siyan ve altın renkli parlak bir borudan güvenle akan veri akışı
Kodlama, rastgele metnin ağ üzerinden güvenle seyahat etmesini sağlar.

encodeURI ile encodeURIComponent karşılaştırması

JavaScript'te iki kodlayıcı bulunur ve yanlış olanı seçmek yaygın bir hatadır. Fark, kapsama ilişkindir. encodeURIComponent, bir sorgu değeri gibi URL'ye eklediğiniz tek bir veri parçası içindir. /, ?, :, @, &, =, + ve # gibi ayrılmış karakterler dahil neredeyse her şeyi kodlar. Bu karakterler veride düz metin olarak bulunabildiğinde tam olarak istediğiniz şey budur.

encodeURI ise çalışmaya devam etmesini istediğiniz tüm bir adres içindir. Yapısal karakterleri olduğu gibi bırakır; böylece URL'yi bir arada tutan eğik çizgiler, iki nokta üst üsteler ve soru işaretleri korunur. Eksiksiz bir URL'niz varsa ve yalnızca boşlukları veya ASCII dışı karakterleri temizlemek istiyorsanız kullanın; daha büyük bir URL'ye değer ekliyorsanız encodeURIComponent'a başvurun. Basit bir kural: bağlantının tamamını encodeURI ile, içine doldurduğunuz parçaları encodeURIComponent ile kodlayın.

Her şey makinenizde kalır

Bu araç tamamen tarayıcınızda çalışır. Yapıştırdığınız metin, aynı standart rutinlerle yerel olarak kodlanır veya çözülür ve asla bir sunucuya gönderilmez; bu da token'lar, imzalı parametreler veya kablo üzerinden göndermek istemediğiniz her şey için güvenli kılar. Başka metin dönüşümleriyle çalışıyorsanız, Base64 dönüştürücü hemen yanı başındadır; daha fazla günlük yardımcı için geliştirici araçlarının tamamına göz atabilirsiniz.

Sıkça sorulan sorular

URL'deki %20 ne anlama gelir?

Kodlanmış bir boşluktur. Boşluk karakteri bir URL'de tam anlamıyla kullanılamaz; bu nedenle bir yüzde işareti ve boşluğun bayt değeri olan 20 onaltılık değeriyle değiştirilir.

Neden bazen %20 yerine artı işareti görürüm?

application/x-www-form-urlencoded türündeki HTML form verisi, tarihsel bir kural olarak boşlukları artı işareti olarak kodlar. Normal bir yol veya sorguda boşluk %20 olarak kodlanır. Her ikisi de kendi bağlamında boşluğa geri çözülür.

encodeURI yerine ne zaman encodeURIComponent kullanmalıyım?

Ayrılmış karakterleri de kodladığı için URL'ye bir sorgu parametresi gibi tek bir değer eklerken encodeURIComponent kullanın. Bir URL'yi bir arada tutan eğik çizgileri, iki nokta üst üsteleri ve soru işaretlerini korumak istediğinizde eksiksiz bir adres için encodeURI kullanın.

URL kodlama verimin anlamını değiştirir mi?

Hayır. Kodlama tamamen tersine çevrilebilir. Sonucu çözmek, her iki tarafta da aynı karakter kümesi kullanıldığı sürece tam orijinal metni, bayt bayt geri verir.

Aksan veya emoji gibi ASCII dışı karakterler nasıl işlenir?

Önce UTF-8 baytlarına dönüştürülür, ardından her bayt kendi yüzde üçlüsü haline gelir. Dolayısıyla tek bir aksanlı harf veya emoji, kodlanmış çıktıda birkaç üçlüye genişleyebilir.

Bu aracı kullandığımda metnim bir sunucuya gönderiliyor mu?

Hayır. Kodlama ve çözme tamamen tarayıcınızda gerçekleşir. Yapıştırdığınız hiçbir şey yüklenmez; bu nedenle özel veya hassas dizelerle kullanmak güvenlidir.