JS基礎編--JSはurlを符号化して復号する(3つの方式の違い)


Javascript言語は符号化の関数として使われています.全部で三つあります.一番古いのはescapeです.この関数は今はもう使われなくなりましたが、歴史的な理由でまだ多くのところで使われています.
escapeとunescape
実際には、escape()は直接URLコードには使用できません.その役割はユニックコードの値を返すことです.例えば、「春節」の帰りは%u 6625%u 8282で、つまりユニックキャラクターの集まりで、「春」は6625文字目(十六進)で、「節」は8282文字目(十六進)です.
具体的なルールは、ASCII 、句読点「@ * _ + - . /」以外のすべての文字を符号化することである.u 0000からu 00 ffまでの間の記号は%xxに変換され、残りの記号は%uxxxxの形に変換される.対応する復号関数はunescape()です.
もう二つのところに注意が必要です.
  • まず、ウェブページのオリジナルコードが何であろうと、Javascriptにエンコードされると、unicode文字になります.つまり、Javascipt関数の入出力は、デフォルトはUnicode文字です.この点は下の二つの関数にも適用されます.
  • の次に、escape()は「+」符号ではない.しかし、ウェブページはフォームを提出する時、スペースがあれば、+文字に変換されることを知っています.サーバーでデータを処理する場合は、+番号をスペースに処理します.だから、使う時は気をつけてください.
  • 例えば、エンコーディング:
    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とdecodeURI
    encodeURI()は、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コードについて