Escape,encodeURIとencodeURIComponent

2009 ワード

URIを操作するならescapeを忘れましょう.これは関係のない関数です.次はencodeURIとencodeURIComponentの2つの名前がはっきり言っています.EncodeURIはURI全体を処理するために用いられ,URIのprotocol,host,portなどの部分を受け入れ,pathとqueryのみを符号化すべきである.encodeURIComponentは、queryの一部として使用する準備ができている文字列を符号化するために使用されます.

一、escapeとそれらは同じクラスではありません


簡単に言えば、escapeは文字列(string)を符号化し、すべてのコンピュータで読めるようにし、他の2つはURLを符号化する役割を果たす.符号化後の効果は、%XXまたは%uXXXXの形態である.このうちASCII @ * / +文字は符号化されず、残りはすべて符号化されます.最も重要なのは、URLを符号化する必要がある場合、この方法を忘れてください.この方法は文字列に対して使用され、URLには適用されません.

二、最もよく使われるencodeURIとencodeURIComponent


URL符号化はよくあることなので、この2つの方法は実際には特に注意しなければならないはずです.これらはすべて符号化URLであり、唯一の違いは符号化された文字範囲であり、そのうち:
  • encodeURIメソッドは、次の文字符号化ASCII ~ ! @ # $ & * ( ) = : / , ; ? + '
  • を行わない.
  • encodeURIComponentメソッドは、次の文字に対してASCII ~ ! * ( ) '
  • を符号化しません.
    したがって、encodeURIComponentはencodeURI符号化の範囲よりも広い.実際の例では、encodeURIComponentはhttp://http%3A%2F%2Fに符号化しますが、encodeURIはしません.

    三、最も重要なのは、どんな場合にどんな方法を使うべきか。

  • 文字列を符号化するだけでURLとは半額の関係がない場合はescapeを使用します.
  • 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全体が使えなくなります.
  • 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を使用すると問題が発生するに違いありません.後の"/"は符号化が必要ですから.