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"]);
domlao
quelle
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);
Susam Pal
quelle
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.

DoctorMick
quelle
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
4

Schauen Sie sich die HTML-URL-Codierungsreferenz an

Sie müssen das + -Zeichen codieren - Der Wert sollte% 2B sein

Morten Anderson
quelle
+Das Vorzeichen ist im Abfrageparameterwert zulässig, wo es nicht codiert werden sollte, da es bereits 'Leerzeichen' codiert
ZZ 5.
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");
gred
quelle
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==

Hai
quelle
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

Michael Rodrigues
quelle
-1

Versuchen Sie dies, es funktioniert für mich:

Request.QueryString["new"].Trim();
Kobalt
quelle
-2

Die Lösung besteht darin, IMMER .Replace ("", "+") einzuschließen, wenn Sie Querystring anfordern

Zeichenfolge s = Request.QueryString ["id"]. Trim (). Replace ("", "+");

Quelle: http://www.webmasterworld.com/forum47/3238.htm

Dilhan Jayathilake
quelle
-2

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

strText = strText.Replace(" ", "+");
Vijay Mungara
quelle
2
Was ist mit den anderen reservierten Charakteren? Diese Lösung behebt nur das + und nicht das? und & etc
John Mc