JavaScript関数decodeURIComponent
との違いは何decodeURI
ですか?
JavaScript関数decodeURIComponent
との違いは何decodeURI
ですか?
回答:
これら二つの違いを説明するために、私は間の違いを説明しましょうencodeURI
とencodeURIComponent
。
主な違いは次のとおりです。
encodeURI
関数は、完全なURIでの使用を目的としています。encodeURIComponent
関数は、区切り記号(; /?:@&= + $、#)の間にある任意の部分である.. well .. URIコンポーネントで使用することを目的としています。したがって、encodeURIComponent
これらのセパレータは、特殊文字ではなくテキストと見なされるため、エンコードされます。
デコード関数の違いに戻ると、各関数は、対応するエンコード対応によって生成された文字列をデコードし、特殊文字のセマンティクスとその処理を処理します。
encodeURIComponent / decodeURIComponent()は、ほとんどの場合、一緒に連結してURI部分のテキスト文字列を分割するために使用するペアです。
あまり一般的ではなく、誤解を招くように名前が付けられたencodeURI:実際にはfixBrokenURIと呼ばれるべきです。これは、URIに近いものですが、スペースなどの無効な文字が含まれているため、実際のURIに変換されます。これは、ユーザー入力からの無効なURIの修正に有効に使用され、IRI(裸のUnicode文字が含まれるURI)をプレーンURIに変換することもできます(%エスケープされたUTF-8を使用して非ASCIIをエンコードします) )。
decodeURIは、いくつかの特別なものを除いて、decodeURIComponentと同じ文字をデコードします。これは、encodeURIの逆になるように提供されていますが、最初に入力したものと同じものを返すことはまだ期待できません。例を参照してください。decodeURI(encodeURI('%20 '));
。
encodeURIが実際にfixBrokenURI()という名前である必要がある場合、decodeURI()は同じようにpotentialBreakMyPreviouslyWorkingURI()と呼ばれることもあります。私はそれをどこでも有効に使用できないと考えることができます。避ける。
js> s = "http://www.example.com/string with + and ? and & and spaces";
http://www.example.com/string with + and ? and & and spaces
js> encodeURI(s)
http://www.example.com/string%20with%20+%20and%20?%20and%20&%20and%20spaces
js> encodeURIComponent(s)
http%3A%2F%2Fwww.example.com%2Fstring%20with%20%2B%20and%20%3F%20and%20%26%20and%20spaces
のように見えencodeURI
ますが、スペースやその他の(印刷できない)文字をエンコードすることで「安全な」URIを生成しますが、encodeURIComponent
さらにコロン、スラッシュ、プラス文字をエンコードし、クエリ文字列で使用するためのものです。+と?のエンコーディング &はクエリ文字列の特殊文字であるため、ここでは特に重要です。
私は同じ質問をしましたが、ここで答えが見つからなかったので、実際の違いを理解するためにいくつかのテストを行いました。これは、URL / URIに関連しない何かのエンコーディングが必要なためです。
encodeURIComponent("A")
「A」を返しますが、「A」を「%41」にエンコードしませんdecodeURIComponent("%41")
「A」を返します。encodeURI("A")
「A」を返しますが、「A」を「%41」にエンコードしませんdecodeURI("%41")
「A」を返します。-つまり、エンコードされていなくても、どちらも英数字をデコードできます。しかしながら...
encodeURIComponent("&")
「%26」を返します。decodeURIComponent("%26")
戻り値 "&"。encodeURI("&")
戻り値 "&"。decodeURI("%26")
「%26」を返します。encodeURIComponentはすべての文字をエンコードするわけではありませんが、decodeURIComponentは%00から%7Fまでの任意の値をデコードできます。
注:%7Fを超える値をデコードしようとすると(Unicode値でない限り)、スクリプトは「URIエラー」で失敗するようです。
エスケープされないencodeURIComponent:
A-Z a-z 0-9 - _ . ! ~ * ' ( )
エスケープされないencodeURI():
A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI
decodeURIComponent("%C3%A9") == "é"; unescape("%C3%A9") == "é";