Dil seç

URL Kodlayıcı (Yüzde Kodlama)

Metni URL'lerde güvenle kullanılacak yüzde kodlamasına çevirin. Bileşen ve tam URL modları, artı işaretli boşluk seçeneği, kopyalama ve indirme bir arada.

Mehmet Demiray Yayınlandı Güncellendi
Paylaş
Bileşen modu ayrılmış karakterleri kodlar; tam mod URL yapısını korur

URL'ler Neden Kodlanmaya İhtiyaç Duyar?

Bir web adresi yalnızca sınırlı bir karakter kümesini güvenle taşıyabilir. RFC 3986 standardı, adres içinde doğrudan kullanılabilecek harfleri, rakamları ve birkaç işareti ayrılmamış (unreserved) karakterler olarak tanımlar. Bunun yanında /, ?, #, &, = gibi işaretler ayrılmış (reserved) karakterlerdir çünkü adresin yapısında özel görevleri vardır. Boşluk, Türkçe harfler veya % işareti gibi kümenin dışında kalan her şey ise doğrudan yazıldığında adresi bozar.

URL Kodlayıcı tam da bu noktada devreye girer. Sorunlu karakterleri yüzde kodlaması (percent-encoding) denilen bir biçime çevirir. Her sorunlu bayt, yüzde işareti ve iki basamaklı onaltılık koduyla temsil edilir. Örneğin boşluk %20, ç harfi ise UTF-8 karşılığıyla %C3%A7 olur.

Kodlama yapılmadığında ne olur? Bir arama kutusuna "kırmızı ayakkabı" yazıp bunu bağlantıya eklediğinizi düşünün. Kodlanmamış boşluk, tarayıcının veya sunucunun adresi yanlış yorumlamasına yol açar. Bağlantı ya kırılır ya da parametrenin bir kısmı kaybolur. Aynı sorun, kampanya bağlantılarına eklenen açıklama metinlerinde veya kullanıcı adlarında da görülür.

Kodlama şu durumlarda kritik önem taşır:

  • Arama sorgularını bağlantıya gömerken
  • UTM etiketleriyle pazarlama bağlantıları oluştururken
  • API isteklerine parametre eklerken
  • Türkçe karakter içeren başlıkları adrese taşırken

Özetle kodlama, metnin görünüşünü değil, aktarım sırasında güvenli kalmasını sağlar. Adresi alan tarafta çözme işlemi yapıldığında metin aslına birebir döner. Ters yönde çalışan işlem için URL çözme aracı kullanılabilir.

Bileşen Kodlama ile Tam URL Kodlama Arasındaki Fark

URL Kodlayıcı iki ayrı modda çalışır ve doğru modu seçmek sonuçtaki en yaygın hatayı önler. Fark, ayrılmış karakterlere yapılan davranışta yatar.

Bileşen modu, adresin tek bir parçasını kodlamak içindir. Bu modda /, ?, &, = gibi yapısal işaretler de dahil olmak üzere güvenli olmayan her karakter kaçışlanır. Amaç, kodlanan metnin adres içinde bağımsız ve masum bir değer olarak durmasıdır. JavaScript tarafındaki encodeURIComponent fonksiyonu tam olarak bu davranışı gösterir.

Tam URL modu ise elinizde zaten yapısı kurulu bir adres olduğunda kullanılır. Bu modda ayrılmış karakterler korunur çünkü bunlar adresin iskeletini oluşturur. Yalnızca boşluk ve benzeri gerçekten geçersiz karakterler kodlanır. Bu davranış encodeURI fonksiyonuna karşılık gelir.

İki modun farkını bir tabloyla görmek yararlı olur:

Karakter Bileşen modu Tam URL modu
boşluk %20 %20
/ %2F /
? %3F ?
& %26 &

Pratik kural şudur: eğer bir sorgu parametresinin değerini kodluyorsanız bileşen modunu seçin. Değerin içinde bir & veya = bulunsa bile kaçışlanır ve parametre yapısını bozmaz. Ama elinizde baştan sona hazır bir adres varsa ve sadece kaba temizlik istiyorsanız tam URL modu doğru seçenektir.

Yanlış mod seçimi, çalışıyor gibi görünen ama belirli girişlerde sessizce bozulan bağlantılara yol açar. Bu yüzden bir parametre değerini işlerken her zaman bileşen modunu tercih etmek en güvenli yaklaşımdır.

Boşluk Sorunu: %20 mi Artı İşareti mi?

Boşluk karakteri, URL kodlamasının en çok kafa karıştıran ayrıntısıdır çünkü iki farklı geçerli temsili vardır: %20 ve +. İkisi de boşluğu ifade eder ama geçmişleri ve kullanım yerleri farklıdır.

%20, standart yüzde kodlamasının doğal sonucudur. Adresin her yerinde, hem yol kısmında hem de sorgu dizisinde güvenle çalışır. + işareti ise eski bir web form geleneğinden gelir. HTML formları verilerini gönderirken application/x-www-form-urlencoded biçimini kullanır ve bu biçimde boşluk artı işaretine dönüştürülür.

Önemli olan şudur: artı işareti yalnızca sorgu dizisinde boşluk anlamına gelir. Adresin yol kısmında + gerçek bir artı işaretidir, boşluk değildir. Bu nedenle karışıklık genellikle yolla sorgu dizisi birbirine karıştığında ortaya çıkar.

URL Kodlayıcı bu tercihi size bırakır. "Boşlukları artı olarak kodla" seçeneği açıldığında araç form tarzı çıktı üretir; kapalı olduğunda ise %20 kullanır. Karar verirken şu ölçüyü uygulayın:

  1. Bir form gönderimi veya klasik sorgu dizisi taklit ediyorsanız + uygun olabilir.
  2. Genel amaçlı, her bağlamda güvenli bir çıktı istiyorsanız %20 seçin.
  3. Adresi alacak sunucunun hangi biçimi beklediğinden emin değilseniz %20 daha güvenli bir varsayılandır.

Çözme tarafında da aynı kurala dikkat etmek gerekir. Bir çözücü, sorgu dizisinde + işaretini boşluğa çevirmeyi bekleyebilir ama yol kısmında çevirmemelidir. Bu asimetri, iki temsili karıştırmanın neden ince hatalara yol açtığını açıklar.

Türkçe Karakterler ve Unicode'un URL'lerdeki Yeri

URL standardı temelde ASCII karakterleri üzerine kuruludur. Bu, ç, ğ, ı, ö, ş, ü gibi Türkçeye özgü harflerin doğrudan adrese yazılamayacağı anlamına gelir. Çözüm, bu harfleri önce UTF-8 kodlamasına, ardından yüzde kodlamasına çevirmektir.

UTF-8'de ASCII dışındaki her karakter birden fazla bayta yayılır ve her bayt ayrı bir yüzde dizisi olur. Bu yüzden tek bir Türkçe harf çoğu zaman iki yüzde bloğuna dönüşür:

Harf UTF-8 kodu
ü %C3%BC
ç %C3%A7
ş %C5%9F
ğ %C4%9F

Örneğin "çiçek" kelimesi kodlandığında %C3%A7i%C3%A7ek biçimini alır. Görünüşü ürkütücü olsa da çözme işlemi metni harfi harfine geri getirir.

Emoji ve diğer semboller de aynı mantıkla çalışır ama daha uzun dizilere yol açar. Tek bir emoji dört bayta kadar çıkabildiği için %F0%9F%98%80 gibi dört bloklu bir çıktı üretebilir. Bu, 4 baytlık bir Unicode kod noktasının kodlanmış halidir.

Modern tarayıcılar adres çubuğunda Türkçe karakterleri okunur biçimde gösterir ama arka planda adres yine kodlanmış olarak taşınır. Uluslararasılaştırılmış adreslerde alan adı kısmı ayrı bir standartla (Punycode) ele alınırken, yol ve sorgu kısımları yüzde kodlamasıyla çalışır.

Türkçe başlıkları bağlantıya taşırken URL Kodlayıcı ile bileşen modunu kullanmak, hem harflerin hem de aralarındaki boşlukların güvenle aktarılmasını sağlar. Benzer bir ikili kodlama mantığını Base64 kodlama aracında da görebilirsiniz.

Sorgu Dizisi Oluştururken En Sık Yapılan Hatalar

Bir bağlantının soru işaretinden sonra gelen kısmına sorgu dizisi denir ve anahtar=deger çiftlerinin & ile ayrılmasıyla oluşur. Bu yapının kırılganlığı, tam da bu ayırıcı karakterlerin veri içinde de görünebilmesinden kaynaklanır.

En yaygın hata, bir değerin içindeki & işaretinin kodlanmadan bırakılmasıdır. Diyelim ki bir isim alanına "Ahmet & Ortakları" yazıldı. Bu değer olduğu gibi bağlantıya eklenirse, sunucu ortadaki & işaretini yeni bir parametrenin başlangıcı sanır ve veri ikiye bölünür. Sonuçta isim alanı yalnızca "Ahmet " olarak okunur, geri kalanı kaybolur.

Aynı sorun =, # ve ? işaretleri için de geçerlidir. Çözüm basittir: her parametre değerini ayrı ayrı bileşen modunda kodlamak. Bu modda & işareti %26 olur ve artık yapısal bir sınır gibi davranmaz.

Diğer sık görülen hatalar şunlardır:

  • Tüm adresi tek seferde kodlayıp ? ve & işaretlerini de bozmak
  • Değeri iki kez kodlayarak %25 gibi çift kaçışlanmış diziler üretmek
  • Boşlukları hiç kodlamayıp bağlantının ilk boşlukta kesilmesine izin vermek

Güvenli bir sorgu dizisi kurmanın adımları şöyledir:

  1. Adresin sabit iskeletini ayrı tutun.
  2. Her parametre değerini tek tek bileşen modunda kodlayın.
  3. Kodlanmış değerleri anahtar=deger biçiminde birleştirin.
  4. Çiftleri & ile bağlayın.

Bu düzen, değerlerin içinde hangi karakter olursa olsun yapının bozulmamasını garanti eder. URL Kodlayıcı ile her değeri tek tek işlemek, bu kuralı uygulamanın en pratik yoludur.

Güvenli Kampanya ve Paylaşım Bağlantıları Hazırlamak

Pazarlama ekipleri, tıklamaları ölçmek için bağlantılara UTM etiketleri ekler. Bu etiketler kaynağı, ortamı ve kampanya adını taşıyan sorgu parametreleridir. Sorun, kampanya adlarının çoğu zaman boşluk, Türkçe karakter veya özel işaret içermesidir. Kodlanmadan eklenen bir etiket, ölçüm aracında yanlış gruplanmış veya tamamen kopmuş verilere yol açar.

Örneğin "yaz indirimi 2026" adlı bir kampanyayı düşünün. Bu değer bileşen modunda kodlandığında boşluklar %20 olur ve etiket bütün halinde korunur. Aksi halde analiz panelinde kampanya "yaz" ve "indirimi" olarak iki parçaya bölünebilir, bu da raporları güvenilmez kılar.

Güvenli bir kampanya bağlantısı için izlenecek yol nettir:

  1. Her UTM değerini ayrı ayrı URL Kodlayıcı ile bileşen modunda kodlayın.
  2. Türkçe karakterli kampanya adlarında çıktının UTF-8 dizilerine dönüştüğünü doğrulayın.
  3. Bağlantıyı yayımlamadan önce bir kez tarayıcıda açıp parametrelerin bozulmadan ulaştığını kontrol edin.

Sosyal paylaşım bağlantılarında da aynı disiplin geçerlidir. Bir başlığı veya açıklamayı paylaşım adresine gömerken kodlama yapılmazsa, metindeki & veya # işaretleri bağlantıyı erkenden keser. Yaklaşık %30 oranında paylaşım hatası, tek bir kodlanmamış özel karaktere kadar izlenebilir.

Bağlantıyı bir görsel kod olarak dağıtmak istediğinizde, kodlanmış ve doğrulanmış adresi URL QR kodu üreteci ile karekoda dönüştürebilirsiniz. Böylece hem dijital hem basılı mecralarda aynı sağlam bağlantı kullanılır. Kısacası kodlama, ölçümün ve paylaşımın sessiz ama vazgeçilmez ilk adımıdır.

En çok yanıtladıklarımız.

Yüzde kodlaması tam olarak nedir?

Yüzde kodlaması, bir adreste doğrudan kullanılamayan karakterleri güvenli bir biçime çevirme yöntemidir. Sorunlu her bayt, yüzde işareti ve iki basamaklı onaltılık koduyla temsil edilir. Örneğin boşluk %20, iki nokta ise %3A olur. Bu sayede metin, aktarım sırasında adresin yapısını bozmadan taşınır.

Bir sorgu parametresinin değeri için hangi modu seçmeliyim?

Parametre değerleri için her zaman bileşen modunu seçin. Bu modda &, =, / ve ? gibi yapısal işaretler de kaçışlanır, böylece değerin içinde bunlardan biri geçse bile parametre bölünmez. Tam URL modu ise bu işaretleri koruduğu için yalnızca baştan sona hazır bir adresi kabaca temizlerken uygundur.

Değerimdeki & işareti neden sorgu dizisini bozdu?

Çünkü & işareti sorgu dizisinde parametreleri ayıran özel bir karakterdir. Bir değerin içine kodlanmadan & koyduğunuzda sunucu onu yeni bir parametrenin başlangıcı sanır ve veriniz ortadan ikiye bölünür. Değeri bileşen modunda kodlarsanız & işareti %26 olur ve artık ayırıcı gibi davranmaz.

Emoji ve şapkalı harfler nasıl kodlanır?

İkisi de önce UTF-8'e, sonra yüzde kodlamasına çevrilir. é gibi aksanlı bir harf çoğunlukla iki bayta, dolayısıyla iki yüzde bloğuna dönüşür. Emojiler daha uzundur; tek bir gülen yüz %F0%9F%98%80 gibi dört bloğa yayılabilir çünkü kod noktası dört bayt tutar. Çözme işlemi bu dizileri özgün karaktere geri getirir.

Kodlanmış bir metni tekrar eski haline nasıl döndürürüm?

Yüzde kodlaması geri döndürülebilir bir işlemdir. Kodlanmış diziyi çözmek için URL çözme aracı kullanabilirsiniz. Çözme sırasında yüzde blokları önce baytlara, ardından UTF-8 üzerinden özgün karakterlere dönüştürülür, böylece metin harfi harfine aslına döner.

URL kodlaması ile Base64 kodlaması aynı şey mi?

Hayır, amaçları farklıdır. URL kodlaması yalnızca adres için güvenli olmayan karakterleri kaçışlar, geri kalan metni okunur bırakır. Base64 kodlama ise tüm veriyi ASCII tabanlı bir alfabeye çevirir ve genellikle ikili veriyi metin olarak taşımak için kullanılır. Bir adres oluşturuyorsanız URL kodlaması doğru seçimdir.

Bir metni iki kez kodlarsam ne olur?

Çift kodlama sık görülen bir hatadır. Bir kez kodladığınızda boşluk %20 olur; bunu tekrar kodlarsanız yüzde işaretinin kendisi de kaçışlanır ve %2520 ortaya çıkar. Sonuçta çözme tarafı metni yanlış yorumlar. Bu yüzden bir değeri yalnızca bir kez, doğru aşamada kodlamak gerekir.

Türkçe karakterli bir adresi başkalarıyla nasıl güvenle paylaşırım?

Adresi bileşen modunda kodladıktan sonra bağlantı, ç veya ş gibi harfler dahil her ortamda bozulmadan taşınır. Bağlantıyı görsel olarak dağıtmak isterseniz kodlanmış adresi URL QR kodu üreteci ile karekoda çevirebilir, böylece hem dijital hem basılı paylaşımda aynı sağlam bağlantıyı kullanabilirsiniz.