+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);