Plus-Anmelde-Abfragezeichenfolge


80

Ich habe eine Webanwendung mit C # und asp.net erstellt. Ich habe einen Parameterwert mit einem Pluszeichen (+) in den Querystring eingefügt. Aber das Pluszeichen verschwindet.

Wie kann ich das Pluszeichen (+) in die Abfragezeichenfolge aufnehmen, ohne zu verschwinden?

Bitte beraten.

Vielen Dank.

Bearbeiten: Code mit UrlEncode hinzugefügt

string str = Server.UrlEncode(Requery.QueryString["new"]);

Tatsächlich hängt der Wert von der Benutzereingabe ab.
— Domlao

Zu Ihrer Information UrlBuilder, es scheint ein bisschen nutzlos zu sein, so bin ich auf Ihre Frage gestoßen. Siehe stackoverflow.com/questions/24576239/…
— KCD

* UriBuildernicht URL
— KCD

Antworten:


137

+Zeichen hat eine semantische Bedeutung in der Abfragezeichenfolge. Es wird verwendet, um einen Raum darzustellen. Ein weiteres Zeichen, das in der Abfragezeichenfolge eine semantische Bedeutung hat &, wird verwendet, um die verschiedenen var=valuePaare in der Abfragezeichenfolge zu trennen .

Die meisten serverseitigen Skripte dekodieren die Abfrageparameter, bevor sie verwendet werden, sodass a +ordnungsgemäß in ein Leerzeichen konvertiert wird. Wenn Sie nun möchten, dass ein Literal +in der Abfragezeichenfolge vorhanden ist, müssen Sie %2Bstattdessen angeben .

+Das Zeichen in der Abfragezeichenfolge wird per URL in ein Leerzeichen dekodiert. %2Bin der Abfragezeichenfolge wird die URL in ein + -Zeichen decodiert.

Sehen Sie den Unterschied zwischen

http://www.google.com/search?q=foo+bar

und

http://www.google.com/search?q=foo%2Bbar

In den obigen Beispielen dekodiert das Google-Serverskript die Abfrageparameter per URL und verwendet sie dann für die Suche.

Die URL-Codierung ist nichts anderes als ein %Zeichen, gefolgt vom Hex-Code des Sonderzeichens. Zum Beispiel wissen wir, dass der Hex-Code von A0x41 (dezimal: 65) ist. Versuche dies:

http://www.google.com/search?q=%41

Hoffe das macht die URL-Codierung klar.

Wenn Sie also möchten, dass das +Zeichen erhalten bleibt, wenn ein JavaScript eine URL mit +Zeichen in seinen Abfrageparametern abruft und ein serverseitiges Skript die Abfrageparameter nach der URL-Dekodierung verarbeitet, sollten Sie die Abfrageparameter in der URL URL-codieren vor der Verwendung der Ausgabe der HTTP-Abrufanforderung, sodass alle +Zeichen in %2B's konvertiert werden, wenn die Anforderung das serverseitige Skript erreicht. Wenn das serverseitige Skript die Abfragezeichenfolge per URL dekodiert, werden alle %2Bwieder in +Zeichen konvertiert, was Sie möchten.

Siehe URL in JavaScript verschlüsseln? Hier erfahren Sie, wie Sie die Parameter mithilfe von JavaScript per URL codieren. Kurze Antwort aus der dortigen Diskussion:

var encodedURL = "http://example.com/foo.php?var=" + encodeURIComponent(param);

1
Wie kann ich das + -Zeichen in% 2B in Javascript ersetzen? Weil ich meinen Querystring in Javascript erstelle.
— Domlao

5

Sie sollten Ihre Abfragezeichenfolgenwerte URLEncode, um sicherzustellen, dass keine Sonderzeichen verloren gehen.


1
So lautet string str = Server.UrlEncode (Requery.QueryString ["new"]); ? DANKE
— Domlao

Nicht ganz, Sie müssen sie codieren, bevor Sie sie in die Abfragezeichenfolge einfügen, anstatt sie wieder herauszunehmen. Wie legen Sie die Werte in der Abfragezeichenfolge fest?
— DoctorMick

in Javascript wie $ ("# btn"). click (function () {var param = "c ++"; ...});
— Domlao


1

Ich ändere meine vorherige Aussage, damit niemand verwirrt wird!

Erstellen Sie Ihre URL mit dem Server.UrlEncode. z.B

string myUrl = "http://myurl?param1="  + Server.UrlEncode("my+param+1");

3
Wenn es sich um eine URL handelt, sollten Sie URL-Code und nicht HTML-Code verwenden. Sie sind unterschiedlich.
— Damien_The_Unbeliever

Ich habe meinen Querystring im Javascript hinzugefügt. Gibt es eine Möglichkeit, ihn im Javascript zu codieren?
— Domlao

0

Ein anderer einfacher Weg ist, Request.Url.ToString().Substring(Request.Url.ToString().IndexOf("=") + 1)vorausgesetzt meine URL ist,http://localhost/MyApp/Activate.aspx?ActivationCode=cHbtqH9P2dDZkx/mYUgFFo7nrNqSFgqdPisAzzu5/nwlEYDOHI+CQw==


0

Bevor Sie Ihren Parameter senden, müssen Sie überprüfen, ob der Parameter ein Pluszeichen enthält. Wenn Sie ein Flag ersetzen müssen, zum Beispiel: Der Parameter lautet: klasjdlkasd + djid3223 können Sie ersetzen: klasjdlkasdFLAGdjid3223

und wenn Sie konvertieren gehen, müssen Sie angain ersetzen

klasjdlkasd + djid3223


-1

Versuchen Sie dies, es funktioniert für mich:

Request.QueryString["new"].Trim();


-2

Fügen Sie diese Zeile in Entschlüsselungsfunktion hinzu:

strText = strText.Replace(" ", "+");

2
Was ist mit den anderen reservierten Charakteren? Diese Lösung behebt nur das + und nicht das? und & etc
— John Mc
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.