簡単明瞭にescape、encodeURIとencodeURIComponentを区別する

1878 ワード

一、前言


この3つの方法の違いを話す文章は多すぎるが、ほとんどが回りくどい.本文は実践の角度からこの3つの方法を話そうとした.
 

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


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

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


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

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


区別は上ではっきり言ったので、次に実例から言えば.
    
1、文字列を符号化するだけでURLとは半額の関係がない場合はescapeを使います.
 
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を使用すると必ず問題が発生します.後の/は符号化する必要があるからです.