urlデコード - javascript エンコード utf-8




JavaScriptでURLをエンコードしますか? (9)

URLエンコーディングとは何ですか?

URLの中に特殊文字がある場合は、URLをエンコードする必要があります。 例えば:

console.log(encodeURIComponent('?notEncoded=&+'));

この例では、 notEncodedという文字列を除くすべての文字が%記号でエンコードされていることがnotEncodedます。 URLエンコーディングは、%ですべての特殊文字をエスケープするため、 パーセントエンコーディングとも呼ばれます。 その後、この特殊記号の%記号の後にユニークなコードがあります

なぜURLエンコーディングが必要なのですか?

特定の文字はURL文字列に特別な値を持ちます。 例えば、? 文字はクエリ文字列の先頭を示します。 Web上のリソースを検索するには、文字が文字列の一部であるかURL構造の一部であるかを区別する必要があります。

JSでURLエンコーディングを達成するにはどうすればよいですか?

JSは、URLを簡単にエンコードするために使用できるユーティリティ関数をたくさん用意しています。 これらは2つの便利なオプションです:

  1. encodeURIComponent() :URIのコンポーネントを引数としてencodeURIComponent() 、エンコードされたURI文字列を返します。
  2. encodeURI() :URIを引数としてencodeURI() 、エンコードされたURI文字列を返します。

例と警告:

encodeURIComponent() URL全体(スキームを含む、例えばhttps://)を渡さないことに注意してください。 これは実際には機能していないURLに変換することができます。 例えば:

// for a whole URI don't use encodeURIComponent it will transform
// the / characters and the URL won't fucntion properly
console.log(encodeURIComponent("http://www.random.com/specials&char.html"));

// instead use encodeURI for whole URL's
console.log(encodeURI("http://www.random.com/specials&char.html"));

URL全体をencodeURIComponent入れて、フォワードスラッシュ(/)も特殊文字に変換することがわかります。 これにより、URLが正しく機能しなくなります。

したがって、(名前が示すように)使用してください:

  1. encodeURIComponentは、 encodeURIComponentするURLの特定の部分にあります。
  2. encodeURIするURL全体にエンコードする

JavaScriptを使ってURLを安全にエンコードすると、GET文字列に入れることができますか?

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

私はその2行目にmyUrl変数をエンコードする必要があるとmyUrlますか?


encodeURIComponent()は行く方法です。

var myOtherUrl = "http://example.com/index.html?url=" + encodeURIComponent(myUrl);

しかし、あなたはphlのバージョンurlencode()との小さな違いがあり、@CMSはすべての文字をエンコードしないことに注意してください。 http://phpjs.org/functions/urlencode/はjsをphpencode()と同等にしphpencode()

function urlencode(str) {
  str = (str + '').toString();

  // Tilde should be allowed unescaped in future versions of PHP (as reflected below), but if you want to reflect current
  // PHP behavior, you would need to add ".replace(/~/g, '%7E');" to the following.
  return encodeURIComponent(str)
    .replace(/!/g, '%21')
    .replace(/'/g, '%27')
    .replace(/\(/g, '%28')
    .replace(/\)/g, '%29')
    .replace(/\*/g, '%2A')
    .replace(/%20/g, '+');
}

developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…スティックします。 関数developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…は、URLに意味的に重要な多くの文字(例えば、 "#"、 "?"、 "&")をエンコードするのは面倒ではありません。 escape()は推奨されず、サーバー上のエンコードされたスペースとして解釈される "+"文字をエンコードするのは面倒ではありません(ここで他の人が指摘しているように、非ASCII文字を適切にURLエンコードしません)。

encodeURI()encodeURIComponent()の違いについては別のところで説明しています。 あなたがURIのコンポーネント(例えば、クエリ文字列パラメータ)として安全に含めることができるように何かをエンコードしたい場合は、 encodeURIComponent()を使用します。


URL文字列をエンコードする

    var url = $(location).attr('href'); //get current url
    //OR
    var url = 'folder/index.html?param=#23dd&noob=yes'; //or specify one

var encodedUrl = encodeURIComponent(url);
console.log(encodedUrl);
//outputs folder%2Findex.html%3Fparam%3D%2323dd%26noob%3Dyes


for more info go http://www.sitepoint.com/jquery-decode-url-string

二重エンコーディングを防ぐために、エンコードする前にURLをデコードすることをお勧めします(例えば、ユーザーが入力したURLを扱っている場合は、すでにエンコードされている可能性があります)。

入力としてabc%20xyz 123があるとしましょう(1つのスペースは既にエンコードされています):

encodeURI("abc%20xyz 123")            //   wrong: "abc%2520xyz%20123"
encodeURI(decodeURI("abc%20xyz 123")) // correct: "abc%20xyz%20123"

以下の関数を使用して、esapiライブラリを使用してURLをエンコードすることができます。 この関数は、 '/'はエンコーディングに失われず、残りのテキストコンテンツはエンコードされます。

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


何も私のために働かなかった。 私が見ていたのは、ログインページのHTMLであり、コード200でクライアント側に戻ってきました。(最初は302でしたが、別のAjaxリクエスト内のログインページをロードする同じAjaxリクエストでした。ログインページのテキスト)。

ログインコントローラでは、次の行を追加しました:

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

そして、グローバルなAjaxハンドラで、私はこれを行いました:

$(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;
            }
        }
    });
});

今私は何の問題もなく、それは魅力のように機能します。


個人的には、多くのAPIが ""を "+"に置き換えたいので、次のように使います:

encodeURIComponent(value).replace(/%20/g,'+');

escapeはさまざまなブラウザで異なって実装されており、 encodeURIはURI(#や偶数/など)内で機能する文字のほとんどをencodeURIしません。完全なURI / URLで壊さずに使用されます。

:encodeURIComponentをクエリ文字列の 使用します (フィールド/値名ではなく、URL全体ではありません)。 それ以外の方法であれば、=、?、&のような文字はエンコードされません。クエリ文字列が公開される可能性があります。

例:

const escapedValue = encodeURIComponent(value).replace(/%20/g,'+');
const url = 'http://example.com/?myKey=' + escapedValue;

組み込み関数encodeURIComponent(str)encodeURI(str)調べてください。
あなたの場合、これは動作するはずです:

var myOtherUrl = 
       "http://example.com/index.html?url=" + encodeURIComponent(myUrl);




encoding