← Zurück zum Blog

URL-Kodierungsfehler, die Entwickler immer noch machen (und beheben)

Entwicklertools29. März 2026·7 Minuten Lesezeit
URL encoding debugging

URL-Codierungsfehler sind subtil, hartnäckig und werden häufig in der Produktion entdeckt. Ein falsch platziertes %20, ein doppelt codiertes kaufmännisches Und oder ein verwechseltes + mit Leerzeichen können API-Aufrufe unterbrechen, Tracking-Daten beschädigen und Sicherheitslücken schaffen. Lassen Sie uns die häufigsten Probleme beheben.

Testen Sie Ihre Codierung mit unserem Tool URL Encoder/Decoder – fügen Sie eine beliebige Zeichenfolge ein und sehen Sie sofort das codierte Ergebnis.

encodeURI vs. encodeURIComponent

JavaScript verfügt über zwei integrierte Kodierungsfunktionen, und die Verwendung der falschen ist die Fehlerquelle Nr. 1:

FunktionEncodesPreservesVerwenden für
encodeURILeerzeichen, Nicht-ASCII: / ? # [ ] @ ! $ & ' ( ) * + , ; =Kodierung einer vollständigen URL
encodeURIComponentAlles oben + : / ? # @ ! $ & ' ( ) * + , ; =Nur - _ . ~ und alphanumerische ZeichenKodieren eines Abfrageparameterwerts
// FALSCH – encodeURI behält & in Abfragewerten bei
const url = 'https://api.example.com/search?q=' + encodeURI('tom & jerry');
// Ergebnis: https://api.example.com/search?q=tom%20&%20jerry
// Das & bleibt erhalten – jetzt sieht es wie ein separater Parameter aus! // RICHTIG
const url = 'https://api.example.com/search?q=' + encodeURIComponent('tom & jerry');
// Ergebnis: https://api.example.com/search?q=tom%20%26%20jerry

Faustregel: Verwenden Sie encodeURIComponent für einzelne Werte. Verwenden Sie encodeURI nur, wenn Sie eine vollständige URL haben, für die nur Nicht-ASCII-Zeichen codiert werden müssen.

Fehler bei der doppelten Kodierung

Doppelte Codierung tritt auf, wenn eine bereits codierte Zeichenfolge erneut codiert wird:

const name = 'Hallo Welt';
const encoded = encodeURIComponent(name); // hallo%20world
const doubled = encodeURIComponent(encoded); // hallo%2520world
// %25 ist die Kodierung von % selbst!

Dies tritt normalerweise auf, wenn:

  • Ein Framework kodiert Abfrageparameter automatisch, und Sie kodieren sie auch vorab
  • Eine URL wird vor dem Speichern codiert und beim Abrufen erneut codiert
  • Middleware verarbeitet die URL auf mehreren Ebenen und fügt jeweils eine Codierung hinzu

Erkennung

Suchen Sie in URLs nach %25 – das ist fast immer ein Zeichen für doppelte Codierung. Die Sequenz %2520 (doppelt codiertes Leerzeichen) ist der klassische Hinweis.

Die + vs. %20 Verwirrung

Bei HTML-Formularübermittlungen (application/x-www-form-urlencoded) werden Leerzeichen zu +. Bei der standardmäßigen Prozentkodierung (RFC 3986) werden Leerzeichen zu %20.

Das ist wichtig, weil:

  • decodeURIComponent dekodiert nicht+ zurück ins Leerzeichen – es bleibt als Literal übrig +
  • Backend-Frameworks können je nach Parser + automatisch dekodieren
  • Wenn Ihre API %20 erwartet, aber + empfängt, werden bei der Suche nach „red+car“ Ergebnisse für „red+car“ (mit einem wörtlichen Plus) anstelle von „red car“ zurückgegeben
// Sichere Dekodierung, die sowohl + als auch %20 verarbeitet
Funktion safeDecodeParam(value) { return decodeURIComponent(value.replace(/\+/g, '%20'));
}

UTF-8 Edge Cases

Nicht-ASCII-Zeichen wie é, ü, 日本語 und Emoji müssen als UTF-8-Bytesequenzen prozentual codiert werden:

encodeURIComponent('café') // caf%C3%A9
encodeURIComponent('日本語') // %E6%97%A5%E6%9C%AC%E8%AA%9E
encodeURIComponent('🔒') // %F0%9F%94%92

Probleme treten auf, wenn:

  • Der Server erwartet Latin-1, empfängt aber UTF-8 (Mojibake – verstümmelte Zeichen)
  • Datenbankspalten sind nicht auf UTF-8 eingestellt, wodurch Multibyte-Zeichen stillschweigend abgeschnitten werden
  • Protokolldateien interpretieren codierte Zeichenfolgen mit falschem Zeichensatz

Fallstricke bei Weiterleitung und Rückruf-URL

OAuth-Rückrufe und Weiterleitungs-URLs sind besonders anfällig für Codierungsfehler:

// Erstellen einer OAuth-Umleitung
const weitergeleitetUri = 'https://myapp.com/callback?source=oauth';
const authUrl = `https://provider.com/auth?redirect_uri=${encodeURIComponent(redirectUri)}`;
// Richtig: Die gesamte Rückruf-URL (einschließlich ihrer eigenen?) wird als einzelner Parameterwert codiert

Häufige Fehler:

  • Der redirect_uri wird überhaupt nicht codiert – der ? im Rückruf teilt die übergeordnete URL
  • Teilweises Kodieren des redirect_uri – Kodieren des Pfads, aber nicht der Abfrage
  • Kodierung der gesamten Authentifizierungs-URL statt nur des Parameterwerts

Diese Fehler führen häufig zu offenen Redirect-Schwachstellen, die Angreifer für Phishing ausnutzen.

Debug-Checkliste

Wenn eine URL nicht wie erwartet funktioniert, überprüfen Sie diese der Reihe nach:

  1. Suchen Sie nach %25 – weist auf Doppelcodierung hin
  2. Check + vs %20 – werden Leerzeichen konsistent behandelt?
  3. Inspect Rohanforderung – Verwenden Sie die Registerkarte „DevTools Network“ des Browsers, um die tatsächlich gesendete codierte URL anzuzeigen
  4. Test mit Sonderzeichen – versuchen Sie es mit & = ? # / in Werten, um zu sehen, ob sie die URL-Struktur zerstören
  5. Content-Type prüfen – Parst der Server als application/x-www-form-urlencoded oder application/json?
  6. Dekodierung auf dem Server überprüfen – die rohen und dekodierten Werte auf der Serverseite protokollieren

Sichere Hilfsfunktionen

// Erstellen Sie sicher eine Abfragezeichenfolge
Funktion buildQueryString(params) { return Object.entries(params) .map(([Schlüssel, Wert]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}` ) .join('&');
} // URLSearchParams verwenden (moderne Browser + Node.js)
const params = new URLSearchParams({ q: 'tom & jerry', page: '1' });
const url = `https://api.example.com/search?${params}`;
// Richtig: Kodierung wird automatisch durchgeführt

Best Practice: Verwenden Sie den Konstruktor URLSearchParams oder URL anstelle der manuellen Zeichenfolgenverkettung. Sie handhaben die Kodierung standardmäßig korrekt.

FAQ

Warum wird + zu einem Leerzeichen?

Dies ist ein Erbe der HTML-Formularcodierung (application/x-www-form-urlencoded), bei der Leerzeichen als + codiert werden. Bei der standardmäßigen Prozentkodierung (RFC 3986) sind Leerzeichen %20. Die Konvention + gilt nur für Abfragezeichenfolgen in Formularübermittlungen, nicht für Pfadsegmente oder andere URL-Teile.

Wie kodiere ich verschachtelte URLs richtig?

Verwenden Sie encodeURIComponent für die innere URL, bevor Sie es in den Abfrageparameter der äußeren URL einfügen. Dadurch werden Zeichen wie :/? codiert, die andernfalls als Teil der Struktur der äußeren URL interpretiert würden.

Warum brechen Signaturen nach der URL-Codierung?

Signaturen werden über exakte Bytesequenzen berechnet. Wenn Sie eine Zeichenfolge vor dem Codieren (oder nach dem Decodieren) signieren, sie aber in codierter Form überprüfen (oder umgekehrt), unterscheiden sich die Bytes und die Signatur schlägt fehl. Normalisieren Sie immer die Kodierung vor dem Signieren.

Verwandte Tools und Artikel