Ein Pluszeichen bedeutet nicht immer ein Leerzeichen
Das URL-Werkzeug von Moyoutil konvertiert URI-Komponenten. Beim Dekodieren mit decodeURIComponent bleibt + unverändert. URLSearchParams verwendet dagegen die Regeln von application/x-www-form-urlencoded: Es ersetzt + im ursprünglichen Text durch ein Leerzeichen, bevor es Prozentsequenzen dekodiert. Daher bleibt ein als %2B dargestelltes Pluszeichen ein +.
Ergebnis der Ausführung derselben Eingabe auf zwei Pfaden
Dies ist das Ergebnis der Ausführung der urlComponent-Funktion des Projekts und von JavaScript URLSearchParams am 5. Oktober 2026. Die Anführungszeichen in der Tabelle sind JSON-Markierungen, die Leerzeichen sichtbar machen, keine Zeichen, die im Ergebnis enthalten sind. Bei der Abfrageanalyse stellen wir jeder Eingabe q= voran.
| Eingabe | Moyoutil-Dekodierung | URLSearchParams |
|---|---|---|
C++ | "C++" | "C " |
C%2B%2B | "C++" | "C++" |
a+b | "a+b" | "a b" |
a%20b | "a b" | "a b" |
Um Suchbegriffe beizubehalten, erstellen Sie Abfragen mit Originalwerten
Dieses Beispiel erzeugt nur Zeichenfolgen und sendet keine Serveranfragen. Wird der ursprüngliche Wert C++ guide an URLSearchParams übergeben, werden Pluszeichen als %2B und das Leerzeichen als + serialisiert. encodeURIComponent verwendet dafür %20. Beim Parsen als Abfrage liefern beide Ergebnisse in diesem Beispiel den ursprünglichen Wert.
const original = "C++ guide";
const query = new URLSearchParams({ q: original }).toString();
// q=C%2B%2B+guide
const component = encodeURIComponent(original);
// C%2B%2B%20guide
new URLSearchParams(query).get("q");
// C++ guideWHATWG-URL: URLSearchParams serialisieren
Das URL-Werkzeug von Moyoutil bietet keine Felder zum Zusammenstellen von Abfragenamen und -werten und keinen Formular-Dekodierungsmodus. Kodieren Sie zum Prüfen eines Werts C++ guide, dekodieren Sie das Ergebnis und vergleichen Sie es mit dem Original. Geben Sie keine vollständige URL in das Feld für die Wertkonvertierung ein. Prüfen Sie die Regeln der tatsächlich verwendeten API.
Wenn Sie einen bereits codierten Wert eingeben, wird auch das Prozentzeichen umgewandelt.
Übergeben Sie ursprüngliche, noch nicht kodierte Werte an die Objektform von URLSearchParams. Ein bereits mit encodeURIComponent kodierter Wert führt dazu, dass % erneut als %25 kodiert wird. Einmaliges Parsen der folgenden Abfrage ergibt C%2B%2B, nicht C++. Prüfen Sie die Verarbeitung beim Senden und Empfangen, bevor Sie wiederholt dekodieren.
const encoded = encodeURIComponent("C++");
// C%2B%2B
const query = new URLSearchParams({ q: encoded }).toString();
// q=C%252B%252B
new URLSearchParams(query).get("q");
// C%2B%2BReihenfolge der Überprüfung auf problematische Links
- Hält den ursprünglichen Suchbegriff und die übergebene Abfragezeichenfolge zusammen. Unterscheiden Sie zwischen C++ und C%2B%2B.
- Überprüfen Sie, ob der empfangende Code decodeURIComponent oder ein formularbasierter Abfrageparser ist. Die Dekodierungsergebnisse von Moyoutil allein bestimmen nicht die Serverergebnisse.
- Rekonstruieren Sie die Abfrage mit den Originalwerten und vergleichen Sie sie mit den Analyseergebnissen. Unterscheiden Sie zwischen Beispielcode und tatsächlichen API-Regeln.
Eine unvollständige Prozentschreibweise wie % oder %2 ist ein Fehler in Moyoutil. %FF ist ebenfalls ein Fehler, da es sich nicht um gültigen UTF-8-Text handelt. Diese Prüfung bedeutet nicht, dass die Fehlerbehandlung anderer Parser gleich ist, noch handelt es sich um eine Funktion zur automatischen Wiederherstellung des Originaltextes.
Häufig gestellte Fragen
Soll ich %20 oder + verwenden?
Wenn Moyoutil einen einzelnen Wert kodiert, wird ein Leerzeichen zu %20. Die Serialisierung von URLSearchParams verwendet +. Prüfen Sie die Regeln des Empfängers und ob die Rückumwandlung den ursprünglichen Wert liefert.
Kann ich alle ursprünglichen Pluszeichen durch Leerzeichen ersetzen?
Nein. Das verändert die Bedeutung von Werten wie C++. Wenden Sie die Formular-Parsingregeln nur auf Zeichenfolgen in diesem Format an und ändern Sie den unkodierten Originaltext nicht willkürlich.