Her metni URL olarak kodlayın veya çözün
Bir sorgu değerini, yol parçasını ya da tam bir URL’yi yüzde kodlamayla kodlayın; %XX dizilerini de okunabilir metne geri çevirin. UTF-8’i, form tarzı + boşluklarını ve satır başına bir değeri destekler. Hiçbir şey tarayıcınızdan çıkmaz.
Metin URL olarak nasıl kodlanır veya çözülür
- Metni, değeri ya da URL’yi girdi kutusuna yapıştırın.
- Kodlama türünü seçin. Tek bir sorgu değeri veya yol parçası için Bileşen kipini koruyun. Yalnızca boşlukları ve ASCII dışı harfleri düzeltilmesi gereken tam bir adres için Tam URL’yi seçin. Bir HTML form gönderimi olarak okunacak veri için Form’u seçin.
- Kodla veya Çöz’e basın. Satır başına bir değer işaretliyken her satır ayrı işlenir; böylece bir parametre ya da URL listesinin tamamını tek seferde dönüştürebilirsiniz.
- Sonucu kopyalayın ya da yeniden çalıştırmak için Sonucu girdi olarak kullan’a basın; örneğin iki kez kodlanmış bir değerin kabuğunu açmak için.
Sorgu dizesi içeren tam bir URL’yi çözdüğünüzde araç her parametrenin adını ve değerini düz metin olarak da listeler; uzun bir izleme ya da yönlendirme URL’sini okumanın en hızlı yolu budur.
Yüzde kodlama nedir
Bir URL yalnızca sınırlı sayıda ASCII karakteri içerebilir ve bunların birçoğunun bir görevi vardır: ? sorguyu başlatır, & parametreleri ayırır, # parçayı (fragment) başlatır, / yol parçalarını ayırır. Geri kalan her şey yüzde kodlamayla girer. Her karakter UTF-8 baytlarına çevrilir ve her bayt % artı iki onaltılık basamak olarak yazılır. Boşluk tek bayttır, bu yüzden %20 olur; é iki bayttır, %C3%A9; Türkçe ş de iki bayttır, %C5%9F; 😀 gibi bir emoji dört bayttır, %F0%9F%98%80. Çözme işlemi süreci tersine çevirir.
Türkçe karakterler de bu kurala girer: ç, ğ, ı, ö, ş ve ü ASCII dışıdır ve her biri iki UTF-8 baytı olarak kodlanır; örneğin ç için %C3%A7, ğ için %C4%9F, ı için %C4%B1. Tarayıcılar Türkçe harfli bir adresi çoğu zaman adres çubuğunda okunur gösterir ama sunucuya kodlanmış gönderir; bu aracı, bir linkin gerçekte nasıl gittiğini görmek için kullanabilirsiniz.
Kurallar, URI sözdizimini tanımlayan standart olan RFC 3986, bölüm 2’den gelir (İngilizce). Büyük harfli onaltılık basamakları önerir (%3a değil, %3A), metnin önce UTF-8 baytlarına kodlanması gerektiğini söyler ve uygulamaların aynı dizeyi birden fazla kez yüzde kodlamaması ya da çözmemesi gerektiği konusunda uyarır.
Ayrılmış ve ayrılmamış karakterler (RFC 3986)
RFC 3986, bir URL’nin içerebileceği karakterleri iki gruba ayırır:
- Ayrılmamış:
A–Z a–zharfleri,0–9rakamları ve- . _ ~. Bunların kodlanması hiçbir zaman gerekmez ve kodlu ya da kodsuz aynı anlama gelir. - Ayrılmış: genel sınırlayıcılar
: / ? # [ ] @ve alt sınırlayıcılar! $ & ' ( ) * + , ; =. Bunlar yapı taşıyabilir; bu yüzden biri URL sözdiziminin değil verinizin parçasıysa yüzde kodlanmalıdır.
Geri kalan her şey (boşluklar, % işaretinin kendisi, tırnaklar, açılı parantezler ve her ASCII dışı karakter) bir URL’de olduğu gibi kullanılamaz ve her zaman kodlanması gerekir. En yaygın olanlar:
| Karakter | Kodlanmış | Neden önemli |
|---|---|---|
| boşluk | %20 (form verisinde +) | URL’lerde hiç izin verilmez |
& | %26 | Yeni bir sorgu parametresi başlatırdı |
= | %3D | Parametre adını değerinden ayırırdı |
? | %3F | Sorgu dizesini başlatırdı |
# | %23 | Kendisinden sonrasını sunucuya hiç gönderilmeyen parçaya (fragment) çevirirdi |
/ | %2F | Fazladan bir yol parçası oluştururdu |
+ | %2B | Form olarak kodlanmış sorgu dizelerinde boşluk diye okunur |
% | %25 | Bir kaçış dizisinin başlangıcı diye okunurdu |
: @ | %3A %40 | Şemayı, kimlik bilgilerini ve ana makineyi ayırır |
é | %C3%A9 | ASCII dışı; iki UTF-8 baytı olarak kodlanır |
Bileşen, tam URL, RFC 3986 veya form: hangisi kullanılmalı
Aynı girdi, sonucun nereye gideceğine göre farklı kodlanır. Tom & Jerry's (2024)/ü girdisi için:
- Bileşen
Tom%20%26%20Jerry's%20(2024)%2F%C3%BCverir. Bu, JavaScript’inencodeURIComponentişlevidir; harfler, rakamlar ve- _ . ! ~ * ' ( )dışındaki her şeyi kodlar. Tek bir sorgu değeri, tek bir yol parçası ya da başka bir URL’nin parametresinin içine koyduğunuz bir URL (örneğin bir yönlendirme hedefi) için kullanın. - Katı RFC 3986
Tom%20%26%20Jerry%27s%20%282024%29%2F%C3%BCverir.encodeURIComponentdokunmasa da RFC 3986’nın alt sınırlayıcı olarak ayırdığı! ' ( ) *karakterlerini de kodlar. Katı bir ayrıştırıcı ya da istek imzalama düzeni tam olarak RFC kümesini bekliyorsa kullanın. - Form
Tom+%26+Jerry%27s+%282024%29%2F%C3%BCverir. WHATWG URL standardının application/x-www-form-urlencoded biçimini izler (İngilizce): yalnızca harfler, rakamlar ve* - . _olduğu gibi bırakılır, boşluk+olur. Bir HTML formunun veURLSearchParams’ın gönderdiği biçim budur. - Tam URL
Tom%20&%20Jerry's%20(2024)/%C3%BCverir. BuencodeURI’dir;; / ? : @ & = + $ , #karakterlerine dokunmaz, çünkü bunların tam bir URL’de zaten görevlerini yaptığını varsayar. Yalnızca boşluk ya da ASCII dışı metin içeren tam bir adresi düzeltmek için kullanın. Bir değer için asla kullanmayın: değerin içindeki bir&sessizce yeni bir parametre başlatır.
%20 mi +: URL’lerde boşluklar
İki kural yan yana yaşar. RFC 3986’nın URL sözdiziminde boşluk her zaman %20’dir ve + yalnızca bir artı işaretidir. Tarayıcıların bir formu GET ile gönderirken kullandığı form kodlamasında ise boşluk + olarak yazılır ve bu biçimin WHATWG ayrıştırıcısı yüzde çözmeden önce her + işaretini boşlukla değiştirir. Yani ?q=a+b bir form verisi ayrıştırıcısı için “a b” anlamına gelirken, bir yoldaki /a+b “a+b” anlamına gelir.
Çözücüde + işaretini boşluk say seçeneğinin bulunmasının nedeni budur. Formların, arama kutularının ve çoğu analiz aracının ürettiği sorgu dizeleri için işaretleyin. Yollar ve artının gerçek olduğu değerler için, örneğin name%2Btag%40example.com olarak kodlanan name+tag@example.com gibi bir e-posta adresi için kapalı bırakın.
Aynı şey kodda
- JavaScript: değerler için
encodeURIComponent()vedecodeURIComponent(), tam URL’ler içinencodeURI(),+boşluklu form tarzı sorgu dizeleri içinURLSearchParams(bkz. MDN). - Python:
urllib.parse.quote()yollar için/işaretini varsayılan olarak kodlamaz ve boşlukları%20yazar;quote_plus()form değerleri için/işaretini kodlar ve boşlukları+yazar (bkz. Python belgeleri). - PHP:
rawurlencode()RFC 3986’yı izler ve boşlukları%20yazar;urlencode()boşlukları+yazar (bkz. PHP kılavuzu).
Sık görülen URL kodlama sorunları
Çift kodlama: %20 yerine %2520
Bir URL’de %2520, %253A ya da benzeri bir şey varsa, zaten kodlanmış bir dize bir kez daha kodlanmıştır; %25 kodlanmış yüzde işaretidir. Bir kez çözün ve sonuca bakın. Çözülmüş sonuçta hâlâ yüzde dizileri varsa araç sizi uyarır ve Sonucu girdi olarak kullan bir sonraki katmanı çözmenizi sağlar. Kodda çözüm, her değeri tam olarak bir kez, URL’yi oluşturduğunuz anda kodlamaktır.
“Malformed URI sequence” hataları
Katı çözücüler, ardından iki onaltılık basamak gelmeyen bir % işaretini ve geçerli UTF-8 olmayan bayt dizilerini reddeder. Bu çözücü ise esnektir: geçerli her diziyi çözer, başıboş bir % işaretini olduğu gibi bırakır, geçersiz baytları � yerine koyma karakteriyle değiştirir ve bunu yaptığını söyler; böylece hiçbir şey almak yerine bozuk noktayı bulabilirsiniz.
# veya & işaretinde kesilen değer
Bir parametre kesik geliyorsa, değer kodlanmamış bir # veya & içeriyordur; genellikle URL dize birleştirmeyle ya da Tam URL kodlamasıyla oluşturulduğu için. Değeri Bileşen kipinde kodlayın.
Tam bir URL’yi kodlamak onu bozar
Tam bir URL’yi Bileşen kipinden geçirmek https:// ifadesini https%3A%2F%2F yapar. Bu yalnızca URL, başka bir URL’nin içinde bir parametre değeriyse doğrudur. Aksi hâlde yalnızca eklediğiniz kısmı kodlayın ya da Tam URL kipini kullanın.
İlgili URL araçları
Eksiksiz kampanya bağlantıları için UTM oluşturucuyu, izleme parametrelerini temizlemek için URL temizleyiciyi, bir bağlantının attığı her adımı görmek için yönlendirme kontrolünü kullanın. Bir betiği tek tıkla çalışan tarayıcı yer imine çevirmek için bookmarklet oluşturucu onu sizin yerinize yüzde kodlar. RFC gibi başvuru sayfalarını çalışırken kaydediyorsanız Marqly onları aranabilir tek bir kütüphanede tutar; bkz. geliştiriciler için Marqly (İngilizce).
Sıkça Sorulan Sorular
URL kodlama ne işe yarar?
Bir URL içinde güvensiz olan ya da özel anlamı bulunan karakterleri, her UTF-8 baytı için bir yüzde işareti ve iki onaltılık basamakla değiştirir. Boşluk %20, & işareti %26, é harfi %C3%A9 olur. Böylece her metin, URL’nin kendi yapısıyla karışmadan bir URL içinde taşınabilir.
encodeURI ile encodeURIComponent arasındaki fark nedir?
encodeURIComponent; harfler, rakamlar ve - _ . ! ~ * ' ( ) dışındaki her şeyi kodlar, bu yüzden tek bir sorgu değeri ya da yol parçası için doğru seçimdir. encodeURI ise ; / ? : @ & = + $ , # karakterlerine dokunmaz; çünkü ona tam ve zaten yapılandırılmış bir URL verdiğinizi varsayar. Değerler için Bileşen kipini, yalnızca tam adresler için Tam URL kipini kullanın.
Boşluk %20 mi olmalı, + mı?
İkisi de farklı yerlerde doğrudur. %20 bir URL’nin her yerinde çalışır. + işareti ise yalnızca form olarak kodlanmış sorgu dizelerinde (application/x-www-form-urlencoded) boşluk anlamına gelir; HTML formlarının ve URLSearchParams’ın ürettiği biçim budur. Bir yolda + işareti düz bir artı işaretidir. Bir formdan gelen sorgu dizesini çözerken “+ işaretini boşluk say” seçeneğini işaretleyin.
URL’mde neden %2520 var?
İki kez kodlanmış demektir. İlk geçiş boşluğu %20 yaptı; ikinci geçiş % işaretinin kendisini %25 olarak kodladı ve %2520 çıktı. RFC 3986, aynı dizenin birden fazla kez kodlanmaması veya çözülmemesi gerektiğini söyler. Bir kez çözün ve %20’ye dönüp dönmediğine bakın, sonra gerekirse yeniden çözün.
Birçok URL’yi aynı anda kodlayabilir veya çözebilir miyim?
Evet. Satır başına bir değer yapıştırın ve “Satır başına bir değer” seçeneğini işaretli bırakın. Her satır ayrı ayrı kodlanır veya çözülür; satır sonları %0A’ya dönüşmek yerine korunur.
Hangi karakterlerin kodlanması gerekir?
Bir değerin parçasıysa (URL’nin yapısının parçası değilse), RFC 3986’nın ayrılmamış kümesinin (harfler, rakamlar, tire, nokta, alt çizgi, yaklaşık işareti) dışındaki her şey kodlanmalıdır. Buna boşluklar, ASCII dışı harfler (ç, ğ, ı, ö, ş, ü gibi), % ve ? # & = / : @ ile + gibi ayrılmış sınırlayıcılar dahildir.
Metnim yükleniyor mu?
Hayır. Kodlama, çözme ve sorgu dizesi dökümü, tarayıcınızdaki yerleşik JavaScript işlevleriyle çalışır. Hiçbir şey sunucuya gönderilmez.





