ホームページ >ウェブフロントエンド >jsチュートリアル >エスケープ、encodeURI、encodeURIComponentの区別方法

エスケープ、encodeURI、encodeURIComponentの区別方法

一个新手
一个新手オリジナル
2017-10-02 09:45:311314ブラウズ

1. はじめに

これら 3 つの方法の違いについて説明した記事はたくさんありますが、そのほとんどは非常に複雑です。この記事では、これら 3 つの方法を実践的な観点から説明します。

2. Escape とそれらは同じカテゴリではありません

簡単に言うと、Escape は文字列をエンコードし (他の 2 つは URL をエンコードします)、その機能は文字列をすべてのコンピュータで読み取れるようにすることです。
エンコード後の結果は、%XX または %uXXXX の形式になります。
ASCII 文字、数字、@*/+ のうち、これらの文字は エンコードされず 、残りはエンコードされます。
最も重要なことは、URL をエンコードする必要がある場合は、このメソッドを忘れてください。このメソッドは文字列に使用され、URL には適していません。 実際、私はこの方法を実際の仕事で使用したことがないので、詳細は説明しません。

3. 最も一般的に使用される encodeURI と encodeURIComponent

URL をエンコードするのが一般的であるため、実際にはこれら 2 つのメソッドに特別な注意を払う必要があります。

どちらもエンコードされた URL ですが、唯一の違いは、エンコードされた文字の範囲です。

encodeURI メソッド

は、ASCII 文字、数字、~!@#$&*() をエンコードしません。 =:/, ;?+'encodeURIComponent メソッド

は、次の文字

ASCII 文字、数字、~!*()' をエンコードしないため、encodeURIComponent のエンコード範囲は encodeURI よりも広いです。 実際の例では、encodeURIComponent は http:// を http%3A%2F%2F にエンコードしますが、encodeURI は行いません。

4. 最も重要なことは、どのような状況でどの方法を使用すべきかということです。

その違いは非常に明らかです。実際の例から説明しましょう。

1. それが単なるエンコードされた文字列であり、URL とは何の関係もない場合は、エスケープを使用します。

2. URL 全体をエンコードしてこの URL を使用する必要がある場合は、encodeURI を使用します。

例えば

encodeURI("http://www.cnblogs.com/season-huang/some other thing");

はエンコード後は

"http://www.cnblogs.com/season-huang/some%20other%20thing";

になります。このうちスペースは%20にエンコードされます。しかし、encodeURIComponentを使用すると、結果は

"http%3A%2F%2Fwww.cnblogs.com%2Fseason-huang%2Fsome%20other%20thing"
「/」さえエンコードされ、URL全体が使用できなくなります

3. URL 内のパラメータをエンコードする必要がある場合は、encodeURIComponent が最適な方法です。

var param = "http://www.cnblogs.com/season-huang/"; //param为参数param = encodeURIComponent(param);var url = "http://www.cnblogs.com?next=" + param;
console.log(url) //"http://www.cnblogs.com?next=http%3A%2F%2Fwww.cnblogs.com%2Fseason-huang%2F"

見たのですが、パラメータの「/」はエンコードできますが、encodeURIを使用すると、次の/をエンコードする必要があるため、間違いなく問題が発生します。

以上がエスケープ、encodeURI、encodeURIComponentの区別方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。