2858 Stimmen

URL in JavaScript kodieren?

Wie kodiert man eine URL sicher mit JavaScript, so dass sie in eine GET-Zeichenfolge eingefügt werden kann?

var myUrl = "http://example.com/index.html?param=1&anotherParam=2";
var myOtherUrl = "http://example.com/index.html?url=" + myUrl;

Ich gehe davon aus, dass Sie die Kodierung der myUrl Variable in dieser zweiten Zeile?

30 Stimmen

Versuchen Sie es mit encodeURI() y decodeURI() .

1 Stimmen

1 Stimmen

Sie können dieses Tool hier verwenden: phillihp.com/toolz/url-encode-decode

3voto

Jonathan Applebaum Punkte 5139

Hier ist ein LIVE-DEMO von encodeURIComponent() y decodeURIComponent() JS eingebaute Funktionen:

<!DOCTYPE html>
<html>
  <head>
    <style>
      textarea{
        width:30%;
        height:100px;
      }
    </style>
    <script>
      // encode string to base64
      function encode()
      {
        var txt = document.getElementById("txt1").value;
        var result = btoa(txt);
        document.getElementById("txt2").value = result;
      }
      // decode base64 back to original string
      function decode()
      {
        var txt = document.getElementById("txt3").value;
        var result = atob(txt);
        document.getElementById("txt4").value = result;
      }
    </script>
  </head>
  <body>
    <div>
      <textarea id="txt1">Some text to decode
      </textarea>
    </div>
    <div>
      <input type="button" id="btnencode" value="Encode" onClick="encode()"/>
    </div>
    <div>
      <textarea id="txt2">
      </textarea>
    </div>
    <br/>
    <div>
      <textarea id="txt3">U29tZSB0ZXh0IHRvIGRlY29kZQ==
      </textarea>
    </div>
    <div>
      <input type="button" id="btndecode" value="Decode" onClick="decode()"/>
    </div>
    <div>
      <textarea id="txt4">
      </textarea>
    </div>
  </body>
</html>

3voto

Arthur Punkte 1977

Utilice fixedEncodeURIComponent Funktion zur strikten Einhaltung der RFC 3986 :

function fixedEncodeURIComponent(str) {
  return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
    return '%' + c.charCodeAt(0).toString(16);
  });
}

3voto

Asif Ashraf Punkte 595

Bei mir hat nichts funktioniert. Alles, was ich sah, war der HTML-Code der Anmeldeseite, der mit dem Code 200 zur Client-Seite zurückkam. (Zunächst 302, aber dieselbe Ajax-Anfrage, die die Anmeldeseite innerhalb einer anderen Ajax-Anfrage lud, die eigentlich eine Weiterleitung sein sollte, anstatt den reinen Text der Anmeldeseite zu laden).

Im Login-Controller habe ich diese Zeile hinzugefügt:

Response.Headers["land"] = "login";

Und in der globalen Ajax-Handler, habe ich dies getan:

$(function () {
    var $document = $(document);
    $document.ajaxSuccess(function (e, response, request) {
        var land = response.getResponseHeader('land');
        var redrUrl = '/login?ReturnUrl=' + encodeURIComponent(window.location);
        if(land) {
            if (land.toString() === 'login') {
                window.location = redrUrl;
            }
        }
    });
});

Jetzt habe ich keine Probleme mehr, und es funktioniert wie geschmiert.

2voto

Mohith Maratt Punkte 171

Sie können die esapi-Bibliothek verwenden und Ihre URL mit der folgenden Funktion kodieren. Die Funktion stellt sicher, dass '/' bei der Kodierung nicht verloren geht, während der restliche Textinhalt kodiert wird:

function encodeUrl(url)
{
    String arr[] = url.split("/");
    String encodedUrl = "";
    for(int i = 0; i<arr.length; i++)
    {
        encodedUrl = encodedUrl + ESAPI.encoder().encodeForHTML(ESAPI.encoder().encodeForURL(arr[i]));
        if(i<arr.length-1) encodedUrl = encodedUrl + "/";
    }
    return url;
}

https://www.owasp.org/index.php/ESAPI_JavaScript_Readme

0 Stimmen

Die ursprüngliche URL wird umgeleitet. Befindet sich der erwartete Inhalt darauf?

1voto

gurpartap Punkte 135
var myOtherUrl = 
   "http://example.com/index.html?url=" + encodeURIComponent(myUrl).replace(/%20/g,'+');

Vergessen Sie nicht das Flag /g, um alle verschlüsselten ' ' zu ersetzen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X