回新聞公告
escape、encodeURI、encodeURIComponent [E] [X]
[ 2019/3/21 上午 11:22:53 ]

escape()、encodeURI()、encodeURIComponent ()都是用來對字串做編碼,以利於在網路上傳遞。

escape() :

escape()是個全域函式,可以在javascript程式的任何地方呼叫它。使用16進制替字串重新編碼,

解碼時使用unescape()函式。escape()當初存在的目的是為了字串的可攜性,

讓字串能夠在所有支援ASCII碼的電腦上傳遞。也有將字串編碼為適合URL格式的功能。

但是escape()本身有些缺陷,已經被列為廢棄的函式,不建議使用。

語法:

escape(string);

string:需要被編碼的字串。

返回值:一個已編碼的字串。

escape()不會對下面字符做編碼:

ASCII碼 數字 *  @  -  _  +  .  /

例:

document.write(escape("welcome to vic's blog"));

輸出==>wellcome%20to%20vic%27s%20blog

document.write(escape("!#%&?=()"));

輸出==>%21%23%25%26%3F%3D%28%29

encodeURI():

encodeURI()也是個全域函式,用來將(包含非法字元)URI字串編碼成符合URI格式的新字串。

可對整個URI做編碼,而不影響到他原本的意義與功能。使用decodeURI() 來進行解碼。

語法:

encodeURI(string)

string:需要被編碼的字串。

返回值:一個已編碼的字串。

encodeURI()不會對下面字符做編碼:

ASCII碼 數字 - _ . ! ~ * ' ( ) ;/?:@&=+$,#

例:

var uristr="test myapp.php?name=維克&type=blog";

document.write(encodeURI(uristr));

輸出==>test%20myapp.php?name=%E7%B6%AD%E5%85%8B&type=blog

encodeURIComponent ():

與encodeURI( )相似,encodeURI()為了整個URI的完整性,因此無法對URI中的功能性字符做編碼。

而encodeURIComponent ()是用來對URI中的局部(參數部分)做編碼,主要是為了避免功能性字符造成參數的混淆,

因此會對URI中的功能性字符編碼。

encodeURIComponent ()使用decodeURIComponent()解碼。

encodeURIComponent ()不會對下面字符做編碼:

ASCII碼 數字, / ? : @ & = + $ #

例:

var uri="http://www.victsao.com/blog/";
document.write(encodeURIComponent(uri)); 

輸出==>http%3A%2F%2Fwww.victsao.com%2Fblog%2F

注意:由於encodeURIComponent ()會對功能性字元編碼,若對整的URI使用encodeURIComponent (),

會使URI失去原本的完整性。所以你無法使用 " http%3A%2F%2Fwww.victsao.com%2Fblog%2F " 來做HttpRequest。