JS基礎編--JSはurlを符号化して復号する(3つの方式の違い)
2441 ワード
Javascript言語は符号化の関数として使われています.全部で三つあります.一番古いのはescapeです.この関数は今はもう使われなくなりましたが、歴史的な理由でまだ多くのところで使われています.
escapeとunescape
実際には、escape()は直接URLコードには使用できません.その役割はユニックコードの値を返すことです.例えば、「春節」の帰りは%u 6625%u 8282で、つまりユニックキャラクターの集まりで、「春」は6625文字目(十六進)で、「節」は8282文字目(十六進)です.
具体的なルールは、
もう二つのところに注意が必要です.まず、ウェブページのオリジナルコードが何であろうと、Javascriptにエンコードされると、unicode文字になります.つまり、Javascipt関数の入出力は、デフォルトはUnicode文字です.この点は下の二つの関数にも適用されます. の次に、escape()は「+」符号ではない.しかし、ウェブページはフォームを提出する時、スペースがあれば、+文字に変換されることを知っています.サーバーでデータを処理する場合は、+番号をスペースに処理します.だから、使う時は気をつけてください. 例えば、エンコーディング:
encodeURI()は、Javascriptで本当にURLをエンコードする関数です.
URL全体をエンコードすることに着目していますので、一般的な記号以外にも、他のいくつかのURLに特殊な意味を持つ記号「/?/?:@=+」、啣啱」も符号化されません.符号化後、シンボルのutf-8形式が出力され、各バイトの前に%が加算されます.これに対応する復号関数はデコード()である.
注意したいのは、シングルクォーテーションマークではないことです.
例えば、エンコーディング:
最後のJavascript符号化関数はencodeURIComponentです.encodeURI()との違いは、URL全体を符号化するのではなく、URLの構成部分を個別に符号化するためのものである.
したがって、「;//?:@@=+、啱」は、これらはエンコーディングされていない記号で、エンコーディングされています.具体的な符号化方法については、両者は同じです.これに対応する復号関数はdecodeURIComponentである.
例えば、エンコーディング:
escapeとunescape
実際には、escape()は直接URLコードには使用できません.その役割はユニックコードの値を返すことです.例えば、「春節」の帰りは%u 6625%u 8282で、つまりユニックキャラクターの集まりで、「春」は6625文字目(十六進)で、「節」は8282文字目(十六進)です.
具体的なルールは、
ASCII
、
、句読点「@ * _ + - . /
」以外のすべての文字を符号化することである.u 0000からu 00 ffまでの間の記号は%xxに変換され、残りの記号は%uxxxxの形に変換される.対応する復号関数はunescape()です.もう二つのところに注意が必要です.
escape('http://www.baidu.com?name=zhang@xiao@jie&order=1')
:"http%3A//www.baidu.com%3Fname%3Dzhang@xiao@jie%26order%3D1"
escape(' ')
:"%u5F20"
復号:unescape("http%3A//www.baidu.com%3Fname%3Dzhang@xiao@jie%26order%3D1")
:"http://www.baidu.com?name=zhang@xiao@jie&order=1"
unescape("%u5F20")
:" "
encodeURIとdecodeURIencodeURI()は、Javascriptで本当にURLをエンコードする関数です.
URL全体をエンコードすることに着目していますので、一般的な記号以外にも、他のいくつかのURLに特殊な意味を持つ記号「/?/?:@=+」、啣啱」も符号化されません.符号化後、シンボルのutf-8形式が出力され、各バイトの前に%が加算されます.これに対応する復号関数はデコード()である.
注意したいのは、シングルクォーテーションマークではないことです.
例えば、エンコーディング:
encodeURI('http://www.baidu.com?name=zhang@xiao@jie&order=1')
:"http://www.baidu.com?name=zhang@xiao@jie&order=1"
復号:decodeURI("http%3A//www.baidu.com%3Fname%3Dzhang@xiao@jie%26order%3D1")
:"http%3A//www.baidu.com%3Fname%3Dzhang@xiao@jie%26order%3D1"
encodeURIComponentとdecodeURIComponent最後のJavascript符号化関数はencodeURIComponentです.encodeURI()との違いは、URL全体を符号化するのではなく、URLの構成部分を個別に符号化するためのものである.
したがって、「;//?:@@=+、啱」は、これらはエンコーディングされていない記号で、エンコーディングされています.具体的な符号化方法については、両者は同じです.これに対応する復号関数はdecodeURIComponentである.
例えば、エンコーディング:
encodeURIComponent('http://www.baidu.com?name=zhang@xiao@jie&order=1')
:"http%3A%2F%2Fwww.baidu.com%3Fname%3Dzhang%40xiao%40jie%26order%3D1"
復号:decodeURIComponent("http%3A%2F%2Fwww.baidu.com%3Fname%3Dzhang%40xiao%40jie%26order%3D1")
"http://www.baidu.com?name=zhang@xiao@jie&order=1"
参考住所:阮一峰:URLコードについて