URL Encode JavaScript — encodeURIComponent()

·Front-end & Node.js Developer·İnceleyenSophie Laurent·Yayınlandı

Ücretsiz URL Kodlayıcı Online aracını doğrudan tarayıcınızda kullanın — kurulum gerektirmez.

URL Kodlayıcı Online Online Dene →

Bir arama URL'si oluştururken, sorgu parametresi olarak bir yönlendirme yolu geçirirken veya bir OAuth yetkilendirme isteği oluştururken, &, = ve boşluklar gibi özel karakterler önce URL kodlanmadığı sürece URL'yi sessizce bozar. JavaScript üç yerleşik yaklaşım sunar — encodeURIComponent(), encodeURI() ve URLSearchParams — her biri farklı bir kullanım durumu için tasarlanmıştır ve yanlış olanı seçmek, kod incelemelerinde karşılaştığım çoğu kodlama hatasının temel nedenidir. Kod yazmadan hızlı tek seferlik kodlama için ToolDeck'in URL Kodlayıcısı tarayıcıda anında işler. Bu kılavuz üç yaklaşımı da derinlemesine ele alır (JavaScript ES2015+ / Node.js 10+): her birini ne zaman kullanacağınızı, boşluklar ve ayrılmış karakterler için nasıl farklılaştıklarını, gerçek dünya Fetch ve API kalıplarını, CLI kullanımını ve en ince üretim hatalarına neden olan dört hatayı.

  • encodeURIComponent(), bireysel parametre değerlerini kodlamak için doğru seçimdir — A–Z, a–z, 0–9 ve - _ . ! ~ * ' ( ) dışındaki her karakteri kodlar
  • encodeURI(), yapısal karakterleri (/ ? # & = :) koruyarak tam bir URL'yi kodlar — bireysel değerler için asla kullanmayın
  • URLSearchParams, anahtar-değer çiftlerini application/x-www-form-urlencoded formatında otomatik kodlar; boşluklar %20 yerine + olur
  • Çift kodlama en yaygın üretim hatasıdır: encodeURIComponent(encodeURIComponent(value)) %20'yi %2520'ye dönüştürür
  • qs kütüphanesi, sorgu dizelerindeki iç içe nesneleri ve dizileri doğal olarak işler — standart URLSearchParams bunu yapamaz

URL Kodlama Nedir?

URL kodlama (resmi adıyla yüzde kodlama, RFC 3986'da tanımlanmıştır), bir URL'de izin verilmeyen veya özel anlamı olan karakterleri güvenli bir temsile dönüştürür. Her güvensiz bayt, bir yüzde işareti ve ardından iki onaltılık basamakla — karakterin ASCII kodu ile — değiştirilir. Boşluk %20 olur, ve işareti %26 olur, eğik çizgi %2F olur.

Her zaman güvenli olan ve hiçbir zaman kodlanmayan karakterlere ayrılmamış karakterler denir: A–Z ve a–z harfleri, 0–9 rakamları ve dört sembol - _ . ~. Diğer her şey ya veri olarak kullanıldığında kodlanmalıdır ya da URL'nin kendisinde yapısal bir rol üstlenir (örneğin / yol segmentlerini ayırır,&sorgu parametrelerini ayırır). Pratik sonuç: bir sorgu parametresinde ham olarak geçirilen «Kablosuz Klavye & Fare» gibi bir ürün adı URL yapısını bozar.

Before · text
After · text
https://shop.example.com/search?q=Wireless Keyboard & Mouse&category=peripherals
https://shop.example.com/search?q=Wireless%20Keyboard%20%26%20Mouse&category=peripherals

encodeURIComponent() — Sorgu Parametreleri için Doğru Fonksiyon

encodeURIComponent(), JavaScript'te URL kodlamanın temel çalışma aracıdır. Ayrılmamış küme (A–Z, a–z, 0–9, - _ . ! ~ * ' ( )) dışındaki her karakteri kodlar. Kritik olarak, URL'lerde yapısal anlama sahip tüm karakterleri kodlar — &, =, ?, #, / — bu da onu parametre değerlerinde kullanım için güvenli kılar. İçe aktarma gerekmez; tüm JavaScript ortamlarında kullanılabilen global bir fonksiyondur.

Minimal çalışan örnek

JavaScript (browser / Node.js)
// Encode a search query parameter that contains special characters
const searchQuery  = 'Wireless Keyboard & Mouse'
const filterStatus = 'in-stock'
const maxPrice     = '149.99'

const searchUrl = `https://shop.example.com/products?` +
  `q=${encodeURIComponent(searchQuery)}` +
  `&status=${encodeURIComponent(filterStatus)}` +
  `&maxPrice=${encodeURIComponent(maxPrice)}`

console.log(searchUrl)
// https://shop.example.com/products?q=Wireless%20Keyboard%20%26%20Mouse&status=in-stock&maxPrice=149.99

Yönlendirme URL'sini sorgu parametresi olarak kodlama

JavaScript
// The redirect destination is itself a URL — it must be fully encoded
// or the outer URL parser will misinterpret its ? and & as its own
const redirectAfterLogin = 'https://dashboard.internal/reports?view=weekly&team=platform'

const loginUrl = `https://auth.company.com/login?next=${encodeURIComponent(redirectAfterLogin)}`

console.log(loginUrl)
// https://auth.company.com/login?next=https%3A%2F%2Fdashboard.internal%2Freports%3Fview%3Dweekly%26team%3Dplatform

// Decoding on the receiving end
const params    = new URLSearchParams(window.location.search)
const next      = params.get('next')              // Automatically decoded
const nextUrl   = new URL(next!)                  // Safe to parse
console.log(nextUrl.hostname)                     // dashboard.internal

ASCII dışı ve Unicode karakterleri kodlama

JavaScript
// encodeURIComponent handles Unicode natively in all modern environments
// Each UTF-8 byte of the character is percent-encoded
const customerName = 'Yılmaz, Mehmet'
const productTitle = 'Istanbul wireless adapter'
const reviewText   = 'Çok iyi — mükemmel çalışıyor'

console.log(encodeURIComponent(customerName))
// Y%C4%B1lmaz%2C%20Mehmet

console.log(encodeURIComponent(productTitle))
// Istanbul%20wireless%20adapter

console.log(encodeURIComponent(reviewText))
// %C3%87ok%20iyi%20%E2%80%94%20m%C3%BCkemmel%20%C3%A7al%C4%B1%C5%9F%C4%B1yor

// Decoding back
console.log(decodeURIComponent('Y%C4%B1lmaz%2C%20Mehmet'))
// Yılmaz, Mehmet
Not:encodeURIComponent(), JavaScript motorunun dahili UTF-16 dize kodlamasını kullanır, ardından karakterin her UTF-8 baytını ayrı ayrı kodlar. Örneğin ı (U+0131) karakteri %C4%B1 olarak kodlanır çünkü UTF-8 temsili iki bayttır: 0xC4 ve 0xB1. Bu doğrudur ve URI standardına uygundur — sunucuların UTF-8 bayt dizisini orijinal kod noktasına geri çözmesi beklenir.

JavaScript URL Kodlama Fonksiyonları — Karakter Referansı

Üç yerel kodlama yaklaşımı tam olarak hangi karakterleri kodladıkları konusunda farklılık gösterir. Aşağıdaki tablo en sık sorun çıkaran karakterler için çıktıyı göstermektedir:

KarakterURL'deki rolüencodeURIComponent()encodeURI()URLSearchParams
Boşluksözcük ayırıcı%20%20+
&parametre ayırıcı%26korundu%26
=anahtar=değer%3Dkorundu%3D
+kodlanmış boşluk (form)%2B%2B%2B
?sorgu başlangıcı%3Fkorundu%3F
#parça%23korundu%23
/yol ayırıcı%2Fkorundu%2F
:şema / port%3Akorundu%3A
@kimlik doğrulama ayırıcı%40korundu%40
%yüzde sabiti%25%25%25
~ayrılmamışkorundukorundukorundu

Kritik sütun, & ve = için encodeURIComponent() ile encodeURI() karşılaştırmasıdır: encodeURI() bunları dokunulmaz bırakır; bu tam URL kodlanırken doğrudur ancak bu karakterleri içeren bir değer kodlanırken felaket olur.

encodeURI() — URL Yapısını Korumak Gerektiğinde

encodeURI(), tam bir URLkodlamak için tasarlanmıştır — URI'nin geçerli yapısal parçaları olan tüm karakterleri korur: şema (https://), ana makine, yol ayırıcıları, sorgu sınırlayıcıları ve parça tanımlayıcısı. Yol segmentlerinde boşluk veya ASCII dışı karakterler içerebilecek bir URL aldığınızda ancak yapısını bozulmadan tutmanız gerektiğinde kullanın.

Kullanıcı tarafından sağlanan URL'yi temizleme

JavaScript
// A URL pasted from a document with spaces in the path and non-ASCII chars
const rawUrl = 'https://cdn.example.com/assets/product images/München chair.png'

const safeUrl = encodeURI(rawUrl)
console.log(safeUrl)
// https://cdn.example.com/assets/product%20images/M%C3%BCnchen%20chair.png

// encodeURIComponent would break it — it encodes the :// and all / characters
const broken = encodeURIComponent(rawUrl)
console.log(broken)
// https%3A%2F%2Fcdn.example.com%2Fassets%2Fproduct%20images%2FM%C3%BCnchen%20chair.png
// ↑ Not a valid URL — the scheme and slashes are destroyed
Not:URL yapıcısı, kullanıcı tarafından sağlanan URL dizelerini işlemek için genellikle encodeURI()'dan daha iyi bir seçimdir — URL'yi normalleştirir, yapıyı doğrular ve her bileşene erişmek için temiz bir API sağlar.encodeURI()'yı yalnızca dize sonucuna ihtiyaç duyduğunuzda ve girdinin yapısal olarak geçerli bir URL olduğunu zaten bildiğinizde kullanın.

URLSearchParams — Sorgu Dizeleri için Modern Yaklaşım

URLSearchParams, modern JavaScript'te sorgu dizelerini oluşturmanın ve ayrıştırmanın deyimsel yoludur. Tüm modern tarayıcılarda ve Node.js 10+'da global olarak kullanılabilir, kodlamayı otomatik olarak işler — düz anahtar-değer çiftleriyle çalışırsınız ve doğru çıktıyı üretir. Önemli bir ayrıntı: boşlukları %20 yerine + olarak kodlayan application/x-www-form-urlencoded spesifikasyonunu takip eder. Bu doğru ve yaygın olarak desteklenmektedir, ancak sunucunuz belirli bir format beklediğinde bunu göz önünde bulundurmalısınız.

Arama isteği URL'si oluşturma

JavaScript (browser / Node.js 10+)
// Building a search API URL with multiple parameters
const filters = {
  query:    'standing desk',
  category: 'office-furniture',
  minPrice: '200',
  maxPrice: '800',
  inStock:  'true',
  sortBy:   'price_asc',
}

const params = new URLSearchParams(filters)

const apiUrl = `https://api.example.com/v2/products?${params}`
console.log(apiUrl)
// https://api.example.com/v2/products?query=standing+desk&category=office-furniture&minPrice=200&maxPrice=800&inStock=true&sortBy=price_asc

// Appending additional params after construction
params.append('page', '2')
params.append('tag', 'ergonomic & adjustable')
console.log(params.toString())
// query=standing+desk&...&tag=ergonomic+%26+adjustable

Gelen sorgu dizesini ayrıştırma

JavaScript
// Both browser (window.location.search) and Node.js (req.url) scenarios
function parseWebhookCallbackUrl(rawSearch: string) {
  const params = new URLSearchParams(rawSearch)

  return {
    eventId:     params.get('event_id'),       // null if missing
    timestamp:   Number(params.get('ts')),
    signature:   params.get('sig'),
    redirectUrl: params.get('redirect'),       // Automatically decoded
    tags:        params.getAll('tag'),         // Handles repeated keys
  }
}

const callbackQuery = '?event_id=evt_9c2f&ts=1717200000&sig=sha256%3Dabc123&redirect=https%3A%2F%2Fdashboard.internal%2F&tag=payment&tag=webhook'

const parsed = parseWebhookCallbackUrl(callbackQuery)
console.log(parsed.redirectUrl)  // https://dashboard.internal/
console.log(parsed.tags)         // ['payment', 'webhook']

JavaScript Fetch İsteklerinde URL Parametrelerini Nasıl Kodlarım

URL kodlamanın üretim kodunda en sık göründüğü yer fetch() çağrılarının içindedir — ya istek URL'si oluşturulurken ya da istek gövdesinde form verisi gönderilirken. Her senaryonun kendine özgü doğru bir yaklaşımı vardır.

GET isteği — sorgu parametrelerini kodlama

JavaScript (browser / Node.js 18+)
async function searchInventory(params: {
  sku?:      string
  warehouse: string
  minStock:  number
  updatedAfter?: Date
}): Promise<{ items: unknown[]; total: number }> {
  const searchParams = new URLSearchParams()

  if (params.sku)          searchParams.set('sku',          params.sku)
  searchParams.set('warehouse',  params.warehouse)
  searchParams.set('min_stock',  String(params.minStock))
  if (params.updatedAfter) searchParams.set('updated_after', params.updatedAfter.toISOString())

  const url = `https://inventory.internal/api/items?${searchParams}`

  const res = await fetch(url, {
    headers: {
      'Authorization': `Bearer ${process.env.INVENTORY_API_KEY}`,
      'Accept':        'application/json',
    },
  })

  if (!res.ok) {
    throw new Error(`Inventory API ${res.status}: ${await res.text()}`)
  }

  return res.json()
}

const results = await searchInventory({
  warehouse:    'eu-west-1',
  minStock:     10,
  updatedAfter: new Date('2025-01-01'),
})

console.log(`Found ${results.total} items`)

POST isteği — form gövdesini URL kodlama

JavaScript
// application/x-www-form-urlencoded POST — used by OAuth token endpoints,
// legacy form-submission APIs, and some webhook providers
async function requestOAuthToken(
  clientId:     string,
  clientSecret: string,
  code:         string,
  redirectUri:  string,
): Promise<{ access_token: string; expires_in: number }> {
  const body = new URLSearchParams({
    grant_type:    'authorization_code',
    client_id:     clientId,
    client_secret: clientSecret,
    code,
    redirect_uri:  redirectUri,  // URLSearchParams encodes this automatically
  })

  const res = await fetch('https://oauth.provider.com/token', {
    method:  'POST',
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
    body:    body.toString(),
    // body: body — also works directly in modern environments (Fetch spec accepts URLSearchParams)
  })

  if (!res.ok) {
    const err = await res.json()
    throw new Error(`OAuth error: ${err.error_description ?? err.error}`)
  }

  return res.json()
}

Bir betik yazmadan kodlanmış bir URL'yi test etmek veya hata ayıklamak istediğinizde, ham değeri doğrudan URL Kodlayıcı'ya yapıştırın — tarayıcı ve sunucunun tam olarak ne göreceğini anında kodlar ve çözer. OAuth yönlendirme URI'lerini, webhook geri çağırma URL'lerini ve CDN imzalı istek parametrelerini incelemek için kullanışlıdır.

Node.js ve Shell ile Komut Satırında URL Kodlama

Kabuk betikleri, CI ardışık düzenleri veya hızlı hata ayıklama için tam bir betik yazmadan çalışan birkaç komut satırı yaklaşımı mevcuttur.

bash
# ── Node.js one-liners — cross-platform (macOS, Linux, Windows) ────────

# encodeURIComponent — encode a single value
node -e "console.log(encodeURIComponent(process.argv[1]))" "Wireless Keyboard & Mouse"
# Wireless%20Keyboard%20%26%20Mouse

# Build a complete query string
node -e "console.log(new URLSearchParams(JSON.parse(process.argv[1])).toString())"   '{"q":"standing desk","category":"office-furniture","page":"1"}'
# q=standing+desk&category=office-furniture&page=1

# Decode a percent-encoded string
node -e "console.log(decodeURIComponent(process.argv[1]))" "Wireless%20Keyboard%20%26%20Mouse"
# Wireless Keyboard & Mouse

# ── curl — automatic encoding ───────────────────────────────────────────
# curl --data-urlencode encodes values automatically in GET and POST
curl -G "https://api.example.com/search"   --data-urlencode "q=Wireless Keyboard & Mouse"   --data-urlencode "category=office furniture"

# ── Python one-liner (available on most systems) ─────────────────────────
python3 -c "from urllib.parse import quote; print(quote(input(), safe=''))"
# (type the string and press Enter)

# ── jq + bash: encode every value in a JSON object ───────────────────────
echo '{"q":"hello world","tag":"node & express"}' |   node -e "const d=JSON.parse(require('fs').readFileSync('/dev/stdin','utf8'));            console.log(new URLSearchParams(d).toString())"
# q=hello+world&tag=node+%26+express

Yüksek Performanslı Alternatif: qs

Yerleşik URLSearchParams, iç içe nesneleri veya dizileri desteklemez — pek çok API ve çerçeve tarafından kullanılan sorgu dizesi şekli. Haftalık 30M+ npm indirmesiyle qs kütüphanesi, pratikte kullanılan tam sorgu dizesi kalıplarını işler: parantez notasyonuyla iç içe nesneler (filters[status]=active), tekrarlanan anahtarlar, özel kodlayıcılar ve yapılandırılabilir dizi serileştirme biçimleri.

bash
npm install qs
# or
pnpm add qs
JavaScript
import qs from 'qs'

// URLSearchParams cannot represent this structure natively
const reportFilters = {
  dateRange: {
    from: '2025-01-01',
    to:   '2025-03-31',
  },
  status:    ['published', 'archived'],
  author:    { id: 'usr_4f2a9c1b', role: 'editor' },
  workspace: 'ws-platform-eu',
}

// qs produces bracket-notation query strings used by Express, Rails, Django REST
const query = qs.stringify(reportFilters, { encode: true })
console.log(query)
// dateRange%5Bfrom%5D=2025-01-01&dateRange%5Bto%5D=2025-03-31&status%5B0%5D=published&status%5B1%5D=archived&author%5Bid%5D=usr_4f2a9c1b&author%5Brole%5D=editor&workspace=ws-platform-eu

// Human-readable (no encoding) — useful for debugging
console.log(qs.stringify(reportFilters, { encode: false }))
// dateRange[from]=2025-01-01&dateRange[to]=2025-03-31&status[0]=published&status[1]=archived...

// Parsing back
const parsed = qs.parse(query)
console.log(parsed.dateRange)   // { from: '2025-01-01', to: '2025-03-31' }
console.log(parsed.status)      // ['published', 'archived']

Düz anahtar-değer parametreleri için URLSearchParams her zaman doğru seçimdir — yerleşiktir, sıfır ek yükü vardır ve evrensel olarak desteklenir. İç içe yapılara, tekrarlanan anahtarlar dışındaki dizi serileştirme biçimlerine ihtiyaç duyduğunuzda veya parantez notasyonlu sorgu dizeleri bekleyen bir arka uç çerçevesiyle entegre olurken qs'e başvurun.

Yaygın Hatalar

Bu dört hatayı üretim kod tabanlarında defalarca gördüm — çoğu yalnızca bir değer özel karakter içerdiğinde ortaya çıkan sessiz başarısızlıklardır; bu tam olarak birim testlerinden geçen ve yalnızca gerçek kullanıcı verileriyle ortaya çıkan hata türüdür.

Hata 1 — Sorgu parametresi değerleri için encodeURI() kullanmak

Sorun: encodeURI(), &, = veya + kodlamaz. Bir değer bu karakterleri içerdiğinde, bunlar sorgu dizesi sözdizimi olarak yorumlanır ve parametreleri sessizce böler veya üzerine yazar. Düzeltme: bireysel değerler için her zaman encodeURIComponent() kullanın.

Before · JavaScript
After · JavaScript
// ❌ encodeURI does not encode & and = in the value
//    "plan=pro&promo=SAVE20" is treated as two separate params
const planName = 'Pro Plan (save=20% & free trial)'
const url = `/checkout?plan=${encodeURI(planName)}`
// /checkout?plan=Pro%20Plan%20(save=20%%20&%20free%20trial)
//                                          ↑ & breaks the query string
// ✅ encodeURIComponent encodes & and = safely
const planName = 'Pro Plan (save=20% & free trial)'
const url = `/checkout?plan=${encodeURIComponent(planName)}`
// /checkout?plan=Pro%20Plan%20(save%3D20%25%20%26%20free%20trial)
//                                   ↑ = and & are both encoded

Hata 2 — Zaten kodlanmış bir dizeyi çift kodlamak

Sorun: Zaten yüzde kodlanmış olan bir değer üzerinde encodeURIComponent()çağırmak, %'yi %25'e dönüştürür; dolayısıyla %20 %2520 olur. Sunucu bir kez çözer ve boşluk yerine gerçek bir %20 alır. Düzeltme: önce çözün, sonra yeniden kodlayın veya değerin hiçbir zaman iki kez kodlanmadığından emin olun.

Before · JavaScript
After · JavaScript
// ❌ encodedParam already contains %20 — encoding again produces %2520
const encodedParam  = 'Berlin%20Office'
const url = `/api/locations/${encodeURIComponent(encodedParam)}`
// /api/locations/Berlin%2520Office
// Server sees: "Berlin%20Office" (a literal percent-twenty, not a space)
// ✅ Decode first if the value may already be encoded
const maybeEncoded = 'Berlin%20Office'
const clean = decodeURIComponent(maybeEncoded)  // 'Berlin Office'
const url   = `/api/locations/${encodeURIComponent(clean)}`
// /api/locations/Berlin%20Office — correct

Hata 3 — URLSearchParams ile encodeURIComponent arasındaki + / %20 farkını görmezden gelmek

Sorun: URLSearchParams, boşlukları + (application/x-www-form-urlencoded) olarak kodlarken encodeURIComponent() %20 kullanır. Her ikisini aynı URL'de karıştırmak — örneğin URLSearchParams çıktısına önceden kodlanmış bir dize eklemek — bazı ayrıştırıcıların kafasını karıştıran tutarsız kodlamaya yol açar. Düzeltme: bir yaklaşım seçin ve URL oluşturma fonksiyonu boyunca tutarlı biçimde kullanın.

Before · JavaScript
After · JavaScript
// ❌ Mixed: URLSearchParams uses + for spaces, but we're appending
//    a manually-encoded segment that uses %20
const base   = new URLSearchParams({ category: 'office furniture' })
const extra  = `sort=${encodeURIComponent('price asc')}`
const url    = `/api/products?${base}&${extra}`
// /api/products?category=office+furniture&sort=price%20asc
//              ↑ two different space encodings in the same URL
// ✅ Use URLSearchParams exclusively — consistent encoding throughout
const params = new URLSearchParams({
  category: 'office furniture',
  sort:     'price asc',
})
const url = `/api/products?${params}`
// /api/products?category=office+furniture&sort=price+asc

Hata 4 — Eğik çizgi içeren yol segmentlerini kodlamayı unutmak

Sorun: REST yol segmenti olarak kullanılan bir dosya yolu (reports/2025/q1.pdf) gibi bir kaynak tanımlayıcısı, sunucu yönlendiricisinin yol ayırıcı olarak yorumladığı / karakterleri içerir ve var olmayan bir uç noktaya yönlendirir. Düzeltme: eğik çizgi içerebilecek yol segmentleri için her zaman encodeURIComponent() kullanın.

Before · JavaScript
After · JavaScript
// ❌ The file path contains / — the server receives a 3-segment path
//    instead of a single resource ID
const filePath = 'reports/2025/q1-financials.pdf'
const url      = `https://storage.example.com/objects/${filePath}`
// https://storage.example.com/objects/reports/2025/q1-financials.pdf
// → Server routes to /objects/:year/:filename — 404 or wrong resource
// ✅ encodeURIComponent encodes / as %2F — single path segment
const filePath = 'reports/2025/q1-financials.pdf'
const url      = `https://storage.example.com/objects/${encodeURIComponent(filePath)}`
// https://storage.example.com/objects/reports%2F2025%2Fq1-financials.pdf
// → Server receives the full file path as one resource identifier

JavaScript URL Kodlama Yöntemleri — Hızlı Karşılaştırma

YöntemBoşlukları kodlama biçimi& = ? kodlar mı# / : kodlar mıKullanım durumuKurulum gerektirir
encodeURIComponent()%20✅ evet✅ evetBireysel parametre değerlerini kodlamaNo
encodeURI()%20❌ hayır❌ hayırTam URL dizesini temizlemeNo
URLSearchParams+✅ evet✅ evetSorgu dizeleri oluşturma ve ayrıştırmaNo
URL yapıcısıbileşene göre otomatikotomatikotomatikTam URL oluşturma ve normalleştirmeNo
qs kütüphanesi%20 (yapılandırılabilir)✅ evet✅ evetSorgu dizelerinde iç içe nesneler ve dizilernpm install qs

Vakaların büyük çoğunluğunda seçim üç senaryoya indirgenir. Yapılandırılmış verilerden çok parametreli sorgu dizeleri oluştururken URLSearchParams kullanın — en güvenli ve en okunabilir seçenektir. Şablon literal URL'deki tek bir değeri, yol segmentlerini veya boşluklar için + yerine %20 bekleyen sistemlerdeki değerleri (AWS S3 imzalı URL'ler gibi) kodlamak için encodeURIComponent()kullanın. Sorgu dizeniz URLSearchParams'ın doğal olarak temsil edemeyeceği iç içe nesneler veya diziler taşıdığında qs'e başvurun.

Sıkça Sorulan Sorular

JavaScript'te encodeURIComponent() ile encodeURI() arasındaki fark nedir?
encodeURIComponent(), ayrılmamış küme (A–Z, a–z, 0–9, - _ . ! ~ * ' ( )) dışındaki her karakteri, & = ? # / : gibi yapısal karakterler dahil, kodlar. Bireysel sorgu parametresi değerlerini veya yol segmentlerini kodlamak için tasarlanmıştır. encodeURI(), yapısal URL karakterlerini korur — & = ? # / : @ kodlamaz — çünkü yapısını bozmadan tam bir URL'yi temizlemek için tasarlanmıştır. & veya = içeren bir değerde encodeURI() kullanmak, sessiz veri bozulmasının yaygın bir kaynağıdır.
URLSearchParams neden boşlukları %20 yerine + olarak kodluyor?
URLSearchParams, boşlukları %20 yerine + olarak kodlayan application/x-www-form-urlencoded spesifikasyonunu (orijinal olarak HTML form gönderimlerinden türetilmiştir) takip eder. Hem + hem de %20, sorgu dizelerindeki boşluğun geçerli temsilleridir ve çoğu sunucu her ikisini de kabul eder. Ancak bazı API'ler — özellikle AWS Signature v4, Google API'leri ve özel REST arka uçları — %20 gerektirir. Bu durumlar için sorgu dizesini manuel olarak oluşturmak üzere encodeURIComponent() kullanın veya URLSearchParams çıktısı üzerinde params.toString().replace(/\+/g, '%20') çağırın.
JavaScript'te eğik çizgi içeren bir yol segmentini nasıl URL kodlarım?
encodeURIComponent() kullanın — / karakterini %2F olarak kodlayarak tüm yolu tek bir segment haline getirir. encodeURI() / karakterini kodlamaz; dolayısıyla yönlendirici tarafından gerçek bir yol ayırıcı olarak işlenirdi. Bu, yol konumunda kaynak tanımlayıcıları kullanan REST API'leri için önemlidir: dosya yolları (reports/2025/q1.pdf), S3 nesne anahtarları ve bileşik kimlikler (org/team/member). Kodlamadan sonra: encodeURIComponent('reports/2025/q1.pdf') → 'reports%2F2025%2Fq1.pdf'.
JavaScript'te yüzde kodlanmış bir URL parametresini nasıl çözümlerim?
Bireysel parametre değerleri için decodeURIComponent() kullanın veya URLSearchParams'ın bunu otomatik olarak halletmesine izin verin. new URLSearchParams(window.location.search).get('key') çağırdığınızda değer zaten çözümlenmiştir — tekrar decodeURIComponent() çağırmanıza gerek yoktur. decodeURIComponent() yalnızca URLSearchParams dışında ham kodlanmış dize aldığınızda, örneğin özel bir başlıktan veya manuel olarak ayrıştırılan bir URL parçasından, doğrudan çağırın. Not: decodeURIComponent(), tek bir % karakteri gibi hatalı biçimlendirilmiş diziler için URIError fırlatır — girdi kullanıcı verilerinden geliyorsa try/catch içine alın.
{ filters: { status: "active" } } gibi iç içe nesneleri kodlamak için URLSearchParams kullanabilir miyim?
Hayır. URLSearchParams yalnızca düz anahtar-değer çiftlerini destekler. İç içe bir nesneyi her değer üzerinde .toString() çağırarak serileştirir ve bu "[object Object]" üretir — sessizce yanlış. İç içe yapılar için qs kütüphanesini kullanın: qs.stringify({ filters: { status: 'active' } }), Express, Rails ve Django REST Framework tarafından anlaşılan filters%5Bstatus%5D=active (parantez notasyonu) üretir. Alternatif olarak, iç içe verileri JSON dizesi olarak serileştirin ve tek bir parametre değeri olarak geçirin: params.set('filters', JSON.stringify({ status: 'active' })).
Fetch API sorgu parametrelerini otomatik olarak URL kodlar mı?
Hayır. fetch(), bir URL dizesini kabul eder ve ağ katmanına kelimesi kelimesine iletir — sorgu parametrelerini ayrıştırmaz veya kodlamaz. Kodlanmamış değerleri URL dizesine birleştirirseniz özel karakterler isteği bozar. Doğru kalıp, fetch()'e geçirmeden önce URLSearchParams veya encodeURIComponent() ile URL oluşturmaktır: const url = new URL('/api/search', base); url.searchParams.set('q', userInput); const res = await fetch(url). URL yapıcısı ve URLSearchParams birlikte temiz bir API ile güvenli otomatik kodlama sağlar.

İlgili Araçlar

Kod yazmadan tek tıklamayla kodlama veya çözme için dizenizi doğrudan URL Kodlayıcı'ya yapıştırın — tarayıcınızda anında yüzde kodlama ve çözme işlemi yapar; kodlanmış çıktı bir fetch çağrısına veya terminale kopyalanmaya hazır.

AC
Alex ChenFront-end & Node.js Developer

Alex is a front-end and Node.js developer with extensive experience building web applications and developer tooling. He is passionate about web standards, browser APIs, and the JavaScript ecosystem. In his spare time he contributes to open-source projects and writes about modern JavaScript patterns, performance optimisation, and everything related to the web platform.

SL
Sophie LaurentTeknik İnceleyici

Sophie is a full-stack developer focused on TypeScript across the entire stack — from React frontends to Express and Fastify backends. She has a particular interest in type-safe API design, runtime validation, and the patterns that make large JavaScript codebases stay manageable. She writes about TypeScript idioms, Node.js internals, and the ever-evolving JavaScript module ecosystem.