Ich habe einmal eine Stunde durch eine Abfragezeichenfolge verloren Ein Webhook eines Drittanbieters wurde gesendet filter[status]=open&filter[assignee]=meMein Betreuer las filter Als flache Zeichenfolge, und ich konnte nicht herausfinden, warum jede Anfrage ungefiltert durchkam In dem Moment, als ich die Roh-URL in einen Abfragezeichenfolgen-Parser einfügte und sah, wie sie sich auf ein verschachteltes Objekt auflöste, war der Fehler offensichtlich: Der Absender verwendete die Klammernotation und mein Parser nicht. Diese Anleitung behandelt, wie ich die String Parser abfragen Was sind bei Toolz.dev tatsächlich die kniffligen Teile von Abfragezeichenfolgen und warum dieselbe Taste auf zwei verschiedene Arten kodiert, kann eine Integration stillschweigend unterbrechen.
tl; dr: Eine Abfragezeichenfolge ist der Teil einer URL nach dem Fragezeichen, der Parameter als Schlüssel-Wert-Paare trägt. Ein Abfragezeichenfolgen-Parser wandelt dies in strukturiertes JSON um, dekodiert Prozentkodierung und verarbeitet wiederholte Schlüssel und Klammerarrays und kann eine korrekt kodierte Abfragezeichenfolge von JSON zurückbauen. Die String Parser abfragen Führt beide Richtungen in Ihrem Browser durch, sodass Sie eine unordentliche URL überprüfen oder eine saubere erstellen können, ohne die Seite zu verlassen.
Was ist eine Abfragezeichenfolge?
Eine Abfragezeichenfolge ist der Abschnitt einer URL, der nach dem ersten Fragezeichen beginnt und am Fragment endet, der Teil nach einem Hash. Er trägt Parameter als key=value Paare, die durch Ampersanden verbunden sind, also ?q=json&page=2 Übergibt zwei Parameter Server und Clientcode lesen diejenigen, um eine Suche zu filtern, eine Kampagne zu verfolgen, eine Liste zu paginieren oder einen Status zwischen Seiten zu übertragen Die generischen Regeln dafür, was in dieser Komponente legal ist und was nicht, stammen von RFC 3986, der URI-Standard und die spezifischen Regeln, die Browser für Parameter im Formularstil befolgen, stammen aus dem WhatWG-URL-Standarddrohen
Der Haken ist, dass RFC 3986 die Syntax der Abfragekomponente definiert aber nicht deren Bedeutung, da steht, welche Zeichen erlaubt sind und wie sie prozentual codiert sein müssen, aber es sagt nichts darüber aus, wie key=value Paare bilden sich auf eine Datenstruktur ab. Diese Interpretation wurde von der HTML-Formularübermittlung übernommen und von verschiedenen Plattformen auf inkompatible Weise erweitert. Aus diesem Grund kann dieselbe Abfragezeichenfolge etwas anderes bedeuten als ein PHP-Backend, ein Rails-Controller und ein JavaScript-Frontend, und warum ein Parser seine Konventionen explizit machen muss.
Jeder Schlüssel und Wert in einer Abfragezeichenfolge ist URL-kodiert, so dass reservierte Zeichen überleben Ein Leerzeichen wird %20 oder ein Pluszeichen, ein Ampersand innerhalb eines Wertes wird %26 Es wird also nicht mit einem Trennzeichen verwechselt, und ein Schrägstrich wird %2F. Parsen bedeutet, die Paare aufzuteilen und dann jede Seite zu dekodieren, und Aufbaumittel, die jede Seite kodieren und die Paare verbinden. Verstehen Sie die Kodierung in beide Richtungen falsch und Werte werden stillschweigend beschädigt.
Was macht eigentlich ein Abfrage-String-Parser?
Ein Parser nimmt eine URL oder eine blanke Abfragezeichenfolge und macht daraus strukturierte, lesbare Daten, auf dem Weg wird alles bis einschließlich Fragezeichen entfernt, das Fragment nach dem Hash ignoriert, die Paare aufgeteilt, jeder Schlüssel und Wert dekodiert, und es wird entschieden, wie wiederholte Tasten und in Klammern gesetzte Tasten dargestellt werden Die Ausgabe ist ein JSON-Objekt, das Sie lesen und kopieren können, plus eine flache Tabelle jedes dekodierten Paares, sodass Duplikate und leere Werte offensichtlich sind.
Auf Toolz.dev läuft das Tool in zwei Richtungen Im Parse-Modus fügt man eine vollständige URL oder nur deren Abfragezeichenfolge ein und erhält den JSON und die Parametertabelle Im Build-Modus fügt man ein JSON-Objekt ein und erhält eine korrekt codierte Abfragezeichenfolge, mit der Wahl, wie Arrays dargestellt werden, lädt das Sample und man kann eine echte URL mit einem Fragment, einem Array im wiederholten Stil und einem codierten Speicherplatz in sauberes JSON auflösen, dann neu aufbauen.
Der Grund, einen dedizierten Parser zu verwenden, anstatt die URL in die Augen zu nehmen, liegt darin, dass Abfragezeichenfolgen ihre Struktur verbergen Eine lange URL mit codierten Zeichen, wiederholten Tasten und Klammernotation ist durch Scannen nahezu unmöglich richtig zu lesen, und die Teile, die am schwersten zu lesen sind, die Codierung und die Duplikate, sind genau die Teile, die Fehler verursachen Wenn Sie die decodierte Tabelle neben dem JSON sehen, wird das Rätselraten entfernt.
Wie werden wiederholte Tasten gehandhabt?
Derselbe Schlüssel kann legal mehr als einmal in einer Abfragezeichenfolge erscheinen, wie in tags=react&tags=laravel‘und es gibt keinen einzigen richtigen Weg, das zu interpretieren, was die Wurzel vieler Verwirrung ist Verschiedene Systeme lösen Duplikate unterschiedlich auf, so dass ein Parser Sie wählen lassen muss.
Die gebräuchlichste Konvention und Standardeinstellung im Toolz.dev-Tool besteht darin, wiederholte Schlüssel in einem Array zu sammeln tags=react&tags=laravel wird {"tags":["react","laravel"]}. Dies entspricht der Art und Weise, wie der Browser's besitzt URLSearchParams.getAll Stellt die Werte und das Verhalten der meisten modernen Backends dar. Einige Frameworks behalten jedoch nur das erste Vorkommen und andere behalten nur das letzte bei, sodass das Tool auch Keep-First- und Keep-Last-Optionen bietet. Wenn Sie eine Integration debuggen, passen Sie den Parser's an das System an, das die URL erstellt oder verbraucht, macht das JSON aussagekräftig.
Diese Mehrdeutigkeit ist nicht akademisch Ein klassisches Sicherheits - und Korrektheitsproblem namens HTTP-Parameterverschmutzung besteht genau deshalb, weil zwei Systeme in einem Anforderungspfad auflösen können id=1&id=2 Anders, man sieht 1 und der andere sieht 2. Die Möglichkeit, explizit zu sehen, wie ein bestimmter Parser Duplikate auflöst, ist der schnellste Weg, über diese Fehlerklasse nachzudenken.
Was bedeuten Klammern wie Tags [] oder Filter [Farbe]?
Die Klammernotation ist eine Konvention zum Kodieren von Arrays und verschachtelten Objekten innerhalb einer flachen Abfragezeichenfolge, und hier sind Parser am meisten anderer Meinung. Eine nachfolgende leere Klammer markiert ein Array, also tags[]=react&tags[]=laravel Builds aufbaut {"tags":["react","laravel"]}. Eine benannte Klammer markiert ein verschachteltes Objekt, also filter[color]=red&filter[size]=l Builds aufbaut {"filter":{"color":"red","size":"l"}}. Halterungen können also nisten a[b][c]=1 Builds aufbaut {"a":{"b":{"c":"1"}}}drohen
Diese Syntax ergibt sich aus der Art und Weise, wie PHP und Ruby on Rails Formulardaten serialisieren, und aus vielen JavaScript-Bibliotheken wie z qs Folge ihm Es ist nicht Teil eines Kern-URL-Standards, genau deshalb ist ein Plain URLSearchParams Im Browser wird es nicht erweitert, sodass Sie einen wörtlichen Schlüssel von erhalten tags[] Statt Array Der Toolz.dev-Parser versteht die Konvention und erweitert sie in die passende Struktur, und er lässt Sie dieses Verhalten ausschalten, wenn Sie stattdessen die wörtlichen Tasten haben möchten.
So richten sich die wichtigsten Konventionen sowohl beim Parsen als auch beim Erstellen aus:
| Array-stil | Kodiert als | Pars zu | Häufig in |
|---|---|---|---|
| Wiederholter Schlüssel | tags=a&tags=b |
["a","b"] |
Browser, die meisten Backends |
| Leere Klammer | tags[]=a&tags[]=b |
["a","b"] |
PHP, Rails, qs Bibliothek |
| Indizierte Klammer | tags[0]=a&tags[1]=b |
["a","b"] |
qs Bibliothek, bestellte Daten |
| Komma-verbunden | tags=a,b |
Eine Zeichenfolge zum Teilen | Einige APIs, kompakte URLs |
Wenn Sie mit dem Tool eine Abfragezeichenfolge erstellen, wählen Sie aus, welche davon Sie aussenden möchten, sodass die Ausgabe mit dem übereinstimmt, was das empfangende System erwartet. Wenn Sie analysieren, erkennt das Tool wiederholte Tasten und Klammerschreibweise für Sie und kommaverbundene Werte bleiben als einzelne Zeichenfolge erhalten, da nur Sie wissen, ob ein Komma ein Trennzeichen oder Teil der Daten ist.
Warum verwandeln sich Pluszeichen in Leerzeichen?
In der Abfragezeichenfolge einer URL wird ein wörtlicher Raum sehr oft als Pluszeichen und nicht als Pluszeichen kodiert %20. Dies ist eine Regel, die von der application/x-www-form-urlencoded Format, das HTML-Formulare verwenden, und die WhatWG-URL-Standard Kodifiziert es: Beim Parsen formularkodierter Daten wird a + Auf ein Leerzeichen dekodiert ist Also q=json+parser Parsen soll auf json parser, und das Toolz.dev-Tool erledigt dies standardmäßig.
Die Subtilität ist, dass diese Regel für die Abfragekomponente gilt, nicht für den Pfad A + In einem Pfadsegment ist ein wörtliches Plus Und gelegentlich enthalten Ihre Daten wirklich Pluszeichen, die erhalten bleiben sollten, wie zum Beispiel eine Telefonnummer oder eine Suche nach C++. Für jene Fälle hat das Werkzeug einen Schalter, um Plus-als-Raum auszuschalten, so dass das Plus die Hin - und Rückfahrt übersteht Dies ist die Art von Detail, die ein Allzweck URL-En Sie nicht entscheiden wird, da es nicht weiß, ob es sich um eine Abfrage oder einen Pfad handelt.
Das Richtige zu bekommen, ist auch beim Erstellen wichtig Wenn das Tool einen Wert kodiert, kodiert es reservierte Zeichen prozentual und verwendet standardmäßig ein Plus für Leerzeichen im formcodierten Stil, sodass die Zeichenfolge, die es erzeugt, eine ist, die Browser und Backends so dekodieren, wie Sie es beabsichtigt haben.
Worin unterscheidet sich das von einem vollständigen URL-Parser?
Ein Abfragezeichenfolgen-Parser und ein vollständiger URL-Parser überlappen sich, beantworten aber unterschiedliche Fragen, und die Verwendung des richtigen speichert einen Schritt Ein URL-Parser unterbricht einen vollständigen Link in seine Komponenten, das Schema, den Host, den Port, den Pfad, die Abfrage und das Fragment, und ist das, was Sie wollen, wenn Sie debuggen, wohin eine Anfrage geht oder warum sich eine Weiterleitung oder ein CORS-Check seltsam verhält Ein Abfragezeichenfolgen-Parser konzentriert sich allein auf die Abfrage und verwandelt sie in strukturiertes, bearbeitbares JSON, einschließlich Arrays und verschachtelter Schlüssel, und kann die Abfrage zurückbauen.
der URL-Parser Auf Toolz.dev ist das Werkzeug für die Anatomie: Geben Sie ihm einen Link und es zeigt Ihnen die Unterscheidung zwischen Host und Ursprung, den Standardport und die Teile des Pfads an. Der Abfragezeichenfolgenparser ist das Werkzeug zum Arbeiten mit Parametern: Geben Sie ihm den gleichen Link und er gibt Ihnen die Parameter als JSON, die Sie bearbeiten können, und baut dann eine Abfragezeichenfolge aus Ihren Bearbeitungen wieder auf. In der Praxis verwende ich sie zusammen, den URL-Parser, um einen Link zu verstehen, und den Abfragezeichenfolgenparser, um seine Parameter zu ändern, und wenn ich einen Kampagnenlink zusammenbaue, erreiche ich den UTM-Builder Stattdessen handelt es sich um einen Abfragezeichenfolgen-Builder, der auf Analyse-Tags spezialisiert ist.
Wann greife ich eigentlich danach?
Die ehrliche Antwort ist immer dann, wenn eine URL mehr tut als auf eine Seite zu zeigen Ich benutze sie zum Debuggen von Webhooks und OAuth-Weiterleitungen, wobei die Parameter die gesamte Nutzlast tragen und ein falsch codierter Wert den Fluss unterbricht Ich benutze ihn, um die Tracking-Parameter auf einem Marketing-Link zu lesen, damit ich genau sehen kann, was eine Kampagne passiert Ich benutze ihn, um eine Abfragezeichenfolge, die ein Kollege in einen Chat eingefügt hat, in eine JSON-Test-Leuchte zu konvertieren, und um das Gegenteil zu tun, indem ich ein kleines Objekt in eine Abfragezeichenfolge für eine schnelle manuelle Anfrage umwandelt.
Ein gearbeitetes Beispiel macht die Auszahlung konkret Ein OAuth-Anbieter leitet mit so etwas wie zurück zu Ihrer App ?code=abc123&state=xyz789&scope=read%20write&error=. Eingefügt in den Parser, der zu einem sauberen Objekt aufgelöst wird: code und state als ihre wörtlichen Werte scope Dekodiert zu read write Weil %20 Raum ist, und error Als leere Zeichenfolge und nicht als fehlender Schlüssel, der Ihnen sagt, dass der Anbieter den Parameter gesendet, aber leer gelassen hat Wenn Sie das von der Roh-URL nach Auge lesen, würden Sie wahrscheinlich den codierten Speicherplatz verpassen scope Und das Leere falsch gelesen error‘und das sind beides genau die Details, die entscheiden, ob Ihr Rückrufhandler korrekt verzweigt, durch das Sehen der dekodierten Tabelle wird die Mehrdeutigkeit beseitigt, und wenn Sie dann die Anfrage reproduzieren müssen, verwandelt der Build-Modus Ihr bearbeitetes Objekt in einem Schritt wieder in eine gültige Rückruf-URL.
Denn bei einem Großteil dieser Arbeit geht es um URLs, die Token, signierte Werte und Tracking-Identifikatoren enthalten. Dies geschieht in einem Tool, das vollständig in Ihren Browserangelegenheiten ausgeführt wird. Nichts, was Sie einfügen, wird übertragen, protokolliert oder gespeichert, und das Tool arbeitet weiterhin mit dem Netzwerk zusammen ausgeschaltet, sodass Sie eine signierte Rückruf-URL aus der Produktion und nicht eine bereinigte Kopie sicher überprüfen können. Ich plädiere im weiteren Sinne dafür, diese Art von Arbeit clientseitig im Netzwerk zu belassen Datenschutz in Online-Tools Anleitung, und dieser Parser sitzt neben den anderen Link - und Textdienstprogrammen, die ich in der beschrieben habe Webentwickler-Toolkit. Wenn ein Teil Ihres Jobs darin besteht, chaotische Eingaben in sauberes slugs und Identifikatoren umzuwandeln, ist die Slug Generator Ein natürlicher Begleiter für die Ausgabeseite der URL-Arbeit ist.
Häufig gestellte Fragen
Was ist eine Abfragezeichenfolge?
Eine Abfragezeichenfolge ist der Teil einer URL nach dem Fragezeichen, der Parameter als Schlüssel-Wert-Paare trägt, zu denen Ampersanden hinzukommen, wie z.B.?q=json& page=2. Server und Clientcode lesen sie, um Ergebnisse zu filtern, Kampagnen zu verfolgen oder den Status zu übergeben Jeder Schlüssel und Wert ist URL-kodiert, so dass Leerzeichen und reservierte Zeichen überleben, und das Fragment nach einem Hash ist nicht Teil davon.
Wie werden wiederholte Tasten beim Parsen gehandhabt?
Standardmäßig wird ein Schlüssel, der mehr als einmal erscheint, zu einem Array zusammengefasst, also tags=react& tags=laravel parses to {" tags": [" react", "laravel"]}. Sie können wechseln, um stattdessen nur den ersten Wert oder nur den letzten Wert beizubehalten, da verschiedene Backends Duplikate unterschiedlich auflösen und Sie möchten, dass der JSON mit dem System übereinstimmt, auf das Sie abzielen.
Was bedeuten Klammern wie Tags [] oder Filter [Farbe]?
Die Klammernotation kodiert Arrays und verschachtelte Objekte innerhalb einer flachen Abfragezeichenfolge. Tags []=react&tags[]=laravel erstellt ein Array und filtert [color]=red& filter [size]=l erstellt das verschachtelte Objekt {"filter":{"color": "red" "size"l"}}}. Es ist in PHP-, Rails- und Formbibliotheken üblich, sodass der Parser es in die passende Struktur erweitert und Sie können dies deaktivieren, um die wörtlichen Schlüssel beizubehalten.
Warum wird aus einem Pluszeichen ein Raum?
In der Abfragezeichenfolge einer URL wird ein wörtlicher Speicherplatz oft als Pluszeichen kodiert, eine Regel, die von der HTML-Formularübermittlung übernommen wurde, sodass der Parser standardmäßig + zurück in ein Leerzeichen umwandelt. Wenn Ihre Daten echte Pluszeichen enthalten, die beibehalten werden müssen, wie z. B. C++ oder eine Telefonnummer, schalten Sie die Plus-as-Space-Option aus und das Plus bleibt erhalten.
Kann ich eine Abfragezeichenfolge von JSON erstellen?
Ja. Wechseln Sie in den Build-Modus und fügen Sie ein JSON-Objekt aus Schlüssel-Wert-Paaren ein. Das Tool kodiert prozentual jeden Schlüssel und Wert und verbindet sie mit Ampersanden. Sie können auswählen, wie Arrays kodiert werden: wiederholte Schlüssel, leere Klammern, indizierte Klammern oder eine durch Kommas getrennte Liste, sodass die Ausgabe mit dem übereinstimmt, was das empfangende System erwartet.
Was ist der Unterschied zwischen diesem und einem vollständigen URL-Parser?
Ein vollständiger URL-Parser zerlegt eine ganze URL in Schema, Host, Port, Pfad, Abfrage und Fragment Ein Abfragezeichenfolgen-Parser konzentriert sich allein auf die Abfrage, verwandelt sie in strukturiertes bearbeitbares JSON einschließlich Arrays und verschachtelter Schlüssel und kann die Abfrage zurückbauen Verwenden Sie den URL-Parser, um einen Link zu überprüfen, und dieses Tool, um seine Parameter zu lesen oder zu ändern.
Verarbeitet es eine vollständige URL oder nur den Abfrageteil?
Beides. Wenn man eine vollständige URL einfügt, lässt der Parser alles bis einschließlich Fragezeichen fallen und ignoriert das Fragment nach dem Hash, so erhält man nur die Parameter, fügt man eine blanke Abfragezeichenfolge ohne Fragezeichen ein, wird sie so analysiert, wie sie ist, was praktisch ist, wenn man nur die Parameter kopiert hat.
Wird meine URL irgendwohin geschickt?
Nr. Parsen, Dekodieren und Kodieren laufen alle als JavaScript in Ihrem Browser, es wird also nichts übertragen, protokolliert oder gespeichert Sie können es bestätigen, indem Sie sich die Netzwerkkarte ansehen, während Sie eine URL analysieren, oder indem Sie die Verbindung zum Internet trennen, da das Tool weiterhin offline funktioniert, sobald die Seite geladen wurde.
Überprüfen oder montieren Sie Parameter mit dem kostenlosen String Parser abfragen. Es analysiert eine URL in JSON und erstellt eine Abfragezeichenfolge zurück, die wiederholte Schlüssel, Klammerarrays und Kodierung vollständig in Ihrem Browser verarbeitet.



