2007年10月1日 星期一

escape, encodeURI, encodeURIComponent的比較

這三個function都是javascrip中提供為encoding用的,只是三個略有不同,以下為三者的比較:

escape: 回傳一個Unicode格式的字串,所有空格,符號,以及其他non-ASCII的字元都會以%xx的格式來取代,其中xx表示與字元相對應的十六進位(base-16)數字,例如:空格space即可表示為"%20"

注意: escape並不會encode含有"+"的字串,同時也無法正確處理含有non-ASCII的字元,也因此,建議盡量避免使用escape

encodeURI: 可將一個字串encode為URI,但是無法encode某些特定字串,例如: ":", "/", ";", 和 "?"

注意: encodeURI較escape來說,是比較恰當的,因為encodeURI是將字串encode成URI,而不僅只是QueryString,要特別注意的是encodeURI並不encode "'",因這個字元在URI裡是有效的

encodeURIComponent: 與encodeURI相同,同樣會傳回一個encoded的URI,除此之外,並可以encode所有字串,包括encodeURI無法encode的字元,但是要注意的是,如果字串中包括路徑,那麼路徑中的"/"也會被encoded,因此當我們將這個路徑當作request傳給web server時,便是無效的了

注意: encodeURIComponent是比較適合大多數情況下使用的,但同樣的,encodeURIComponent也並不encode "'"

reference: http://xkr.us/articles/javascript/encode-compare/

沒有留言: