[ Înapoi la blog

Greșeli de codificare URL pe care dezvoltatorii le fac încă (și remediază)

[Instrumente pentru dezvoltatori29 martie 2026·[ min citire [URL encoding debugging

Erorile de codificare URL sunt subtile, persistente și adesea descoperite în producție. Un %20 greșit, un ampersand dublu codificat sau un + confuz față de spațiu poate întrerupe apelurile API, corupa datele de urmărire și poate crea vulnerabilități de securitate. Să le reparăm pe cele mai comune.

Testează-ți codarea cu instrumentul nostru Codificator/Decodor de adrese URL — inserează orice șir și vezi rezultatul codificat instantaneu.

[ vs encodeURIComponent

JavaScript are două funcții de codare încorporate, iar utilizarea pe cea greșită este sursa #1 de erori:

[ FuncțiaCodificăConserve[[ pentru encodeURISpatii, non-ASCII[[ / ? # [ ] @ ! $ & ' ( ) * + , ; =[Codificarea unei adrese URL complete encodeURIComponentTotul de mai sus + : / ? # @ ! $ & ' ( ) * + , ; =[Numai - _ . ~ și alfanumericeCodificarea valorii unui parametru de interogare [
// GREȘIT — codulURI păstrează și în valorile de interogare
const url = 'https://api.example.com/search?q=' + encodeURI('tom & jerry');
// Rezultat: [
// & este păstrat — acum arată ca un parametru separat! // CORECT
const url = 'https://api.example.com/search?q=' + encodeURIComponent('tom & jerry');
// Rezultat: [
[Regula generală: Utilizați encodeURIComponent pentru valori individuale. Utilizați [ numai atunci când aveți o adresă URL completă care are nevoie doar de caractere non-ASCII codificate.

[ de codificare dublă

Codificarea dublă are loc atunci când un șir deja codificat este din nou codificat:

[const name = 'bună lume'; const encoded = encodeURIComponent(nume); // salut%20world const dublat = encodeURIComponent(encoded); // salut%2520world // %25 este codificarea lui % în sine!
[ lucru se întâmplă de obicei când:

[
  • Un cadru codifică automat parametrii de interogare, iar tu îi pre-codificați de asemenea
  • O adresă URL este codificată înainte de a fi stocată, apoi este codificată din nou când este preluată
  • Middleware procesează adresa URL la mai multe straturi, fiecare adăugând codificare
  • [

    Căutați %25 în adrese URL - este aproape întotdeauna un semn de dublă codificare. Secvența [ (spațiu codificat dublu) este clasicul indicator.

    [ + vs %20 [ trimiterile de formulare HTML (application/x-www-form-urlencoded), spațiile devin [. În codificarea procentuală standard (RFC 3986), spațiile devin [.

    [ lucru contează deoarece:

    [
  • decodeURIComponent nu decodează + înapoi în spațiu - îl lasă ca un literal [
  • Cadurile de backend pot sau nu auto-decoda + în funcție de parser
  • Dacă API-ul dvs. așteaptă %20, dar primește +, căutarea „roșu+mașină” returnează rezultate pentru „roșu+mașină” (cu un plus literal) în loc de „roșu mașină”[][[]TOK40[TOK [
    // Decodare sigură care gestionează atât + cât și %20
    function safeDecodeParam(valoare) { return decodeURIComponent(value.replace(/\+/g, '%20'));
    }
    [ Edge UTF-8

    Caractere non-ASCII, cum ar fi é, ü, 日本語 și emoji-urile trebuie să fie codificate în U8 în procente de 8. secvențe:

    encodeURIComponent('café') // caf%C3%A9
    encodeURIComponent('日本語') // %E6%97%A5%E6%9C%AC%E8%AA%9E
    encodeURIComponent('🔒') // %F0%9F%94%92
    [ apar atunci când:

    [
  • Serverul așteaptă Latin-1, dar primește UTF-8 (mojibake — caractere confuze)
  • Coloanele bazei de date nu sunt setate la UTF-8, trunchiind caracterele pe mai mulți octeți
  • Fișierele jurnal interpretează șirurile codificate cu un set de caractere greșit
  • [

    Capcane ale adreselor URL de redirecționare și apel invers

    Apelurile inverse OAuth și adresele URL de redirecționare sunt în mod special predispuse la erori de codificare:

    // Crearea unei redirecționări OAuth
    const redirectUri = 'https://myapp.com/callback?source=oauth';
    const authUrl = `https://provider.com/auth?redirect_uri=${encodeURIComponent(redirectUri)}`;
    // Corect: întreaga adresă URL de apel invers (inclusiv a sa?) este codificată ca o singură valoare a parametrului
    [ frecvente:

    [
  • Nu se codifică deloc redirect_uri? din apel invers împarte adresa URL părinte
  • [ [ parțial — codificarea căii, dar nu a interogării
  • Codificarea întregii adrese URL de autentificare în loc de doar valoarea parametrului
  • [

    Aceste erori creează adesea vulnerabilități de redirecționare deschise pe care atacatorii le exploatează pentru phishing.

    [ de verificare a remedierii

    Când o adresă URL nu funcționează conform așteptărilor, verificați-le în ordine:

    [ [Căutați %25 — indică codificare dublă [Verificați + vs %20 — sunt spațiile tratate în mod consecvent?
  • Inspectați cererea brută — utilizați fila Rețea DevTools din browser pentru a vedea adresa URL codificată trimisă
  • [Testează cu caractere speciale — încearcă [ = ? # / în valori pentru a vedea dacă încalcă structura URL
  • Verificați tipul de conținut — serverul se analizează ca application/x-www-form-urlencoded sau application/json[K
  • Verificați decodarea pe server — înregistrați valorile brute și decodate pe partea de server
  • [ [ de ajutor sigure
    // Creați un șir de interogare în siguranță
    funcția buildQueryString(params) { returnează Object.entries(params) .map(([cheie, valoare]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}` ) .join('&');
    } // Folosiți URLSearchParams (browserele moderne + Node.js)
    const params = URLSearchParams noi({ q: 'tom & jerry', page: '1' });
    url const = `https://api.example.com/search?${params}`;
    // Corect: gestionează codificarea automat

    Cele mai bune practici: Folosiți URLSearchParams sau URL în loc de concatenarea manuală a șirurilor. Aceștia gestionează codificarea corect în mod implicit.

    [ [ frecvente [ ce + devine un spațiu?

    Aceasta este o moștenire de la codificarea formularelor HTML (application/x-www-form-urlencoded), unde spațiile sunt codificate ca +. În codificarea procentuală standard (RFC 3986), spațiile sunt [. Convenția [ se aplică numai șirurilor de interogări din trimiterile formularelor, nu și segmentelor de cale sau altor părți URL.

    [ codific corect adresele URL imbricate?

    Utilizați encodeURIComponent pe adresa URL interioară înainte de a o plasa în parametrul de interogare a adresei URL externe. Aceasta codifică caractere precum :/? care altfel ar fi interpretate ca parte a structurii URL-ului extern.

    [ ce se rup semnăturile după codificarea adresei URL?

    Semnăturile sunt calculate pe secvențe exacte de octeți. Dacă semnați un șir înainte de codare (sau după decodare), dar îl verificați în formă codificată (sau invers), octeții diferă și semnătura eșuează. Normalizați întotdeauna codificarea înainte de a semna.

    [ [ și articole înrudite [
  • Coder/Decodor URL — testează codificarea în timp real
  • Greșeli de securitate JWT — codificarea contează și pentru manipularea token-ului
  • Remedierea nepotrivirii sumei de control — atunci când codificarea modificări hash-urile fișierelor corupte
  • [