2012-05-27 184 views
4

我正在使用一個URL打開一個html頁面,並且我正在使用查詢字符串與頁面url一起發送數據。 ex:abc.html?firstParameter = firstvalue & seconedParameter = seconedvalue 問題是,如果參數中的「firstvalue」或「secondvalue」包含 特殊字符如#,(,),%,{,那麼我的url構造不好。在這種情況下,url無法驗證。 我正在做這一切的JavaScript。任何機構都可以幫我解決這個問題。轉義URL中的特殊字符

回答

10

你有3種選擇:

escape() will not encode: @*/+ 

encodeURI() will not encode: [email protected]#$&*()=:/,;?+' 

encodeURIComponent() will not encode: ~!*()' 

但在你的情況,如果你想要一個URL傳遞到其他頁面的GET參數,你應該使用逃生或encodeURIComponent方法,但並非是encodeURI。

+0

感謝名單約傑什,請你能告訴我如何在JavaScript中使用這些方法。我可以不必調用這些方法,如URL.escape();它的工作原理是 – ARV

+0

thanx yogesh。 – ARV

0

爲了安全起見,確保您已經轉義了RFC 1738和RFC 3986中指定的所有保留字符,您應該使用encodeURIComponent,escape和替換星號('*')的組合:

encoded = encodeURIComponent(parm).replace(/[!'()]/g, escape).replace(/\*/g, "%2A"); 

[說明] 儘管RFC 1738:統一資源定位器(URL)指定*,」,(和)字符可能被留在URL未編碼,

因此,僅!字母數字,特殊字符「$ -_。+!*'(),」和 用於其保留目的的保留字符可用於在URL中未編碼的 。

RFC 3986,第12-13頁指出這些特殊字符被保留爲子分隔符。

保留= GEN-delims /子delims

GEN-delims = 「:」 「?」/ 「/」/ /「#」/「[」/「]」/「@」

sub-delims =「!」 /「$」/「&」/「'」/「(」/「)」 /「*」/「+」/「,」/「; /「=」

escape()函數已被棄用,但可用於對感嘆號,單引號,左括號和右括號進行URL編碼。而且由於星號是否必須在URL中進行編碼存在一些不明確的地方,並且它不會對編碼造成傷害,所以您可以明確地使用類似replace()函數調用的方式進行編碼。 [請注意,escape()函數被傳遞爲second parameter to the first replace() function call。如此處所用,替換爲!,',(或)的每個匹配特殊字符替換調用escape()函數一次,並且escape僅返回該字符的「轉義序列」以替換,該轉義序列將任何轉義字符與其他字符重新組合片段]

另見'https://stackoverflow.com/questions/6533561/urlencode-the-asterisk-star-character'

而且雖然有些網站甚至已經確定的asterkisk(*)作爲下RFC3986保留字符,它們不包括在their URL component encoding tool

非編碼URL PARMS:

parm1=this is a test of encoding [email protected]#$%^&*()' 
parm2=note that * is not encoded 

編碼的URL PARMS:

parm1=this+is+a+test+of+encoding+%21%40%23%24%25%5E%26*%28%29%27 
parm2=note+that+*+is+not+encodeds+not+encoded