[英]escaping special character in a url
我正在使用 url 打開 html 頁面,並且我正在使用頁面 url 的查詢字符串中發送數據。
例如: abc.html?firstParameter=firstvalue&seconedParameter=seconedvalue
問題是如果參數中的firstvalue
或secondvalue
包含特殊字符,如#,(,),%,{
,那么我的 url 構造不好。 在這種情況下 url 沒有驗證。 我在javascript
做這一切。 任何人都可以幫我解決這個問題。
您有 3 個選擇:
escape() will not encode: @*/+
encodeURI() will not encode: ~!@#$&*()=:/,;?+'
encodeURIComponent() will not encode: ~!*()'
但是在您的情況下,如果您想將 url 傳遞到其他頁面的 GET 參數中,您應該使用轉義或 encodeURIComponent,而不是 encodeURI。
為了安全並確保您已經轉義了 RFC 1738 和 RFC 3986 中指定的所有保留字符,您應該使用 encodeURIComponent、escape 和替換星號('*')的組合,如下所示:
encoded = encodeURIComponent( parm ).replace(/[!'()]/g, escape).replace(/\*/g, "%2A");
[說明] 雖然 RFC 1738: Uniform Resource Locators (URL) 指定 *、!、'、( 和 ) 字符可以保留在 URL 中未編碼,
因此,只有字母數字、特殊字符“$-_.+!*'(),”和用於其保留目的的保留字符可以在 URL 中未編碼地使用。
RFC 3986 第 12-13 頁指出,這些特殊字符被保留為子分隔符。
保留 = gen-delims / sub-delims
gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
子delims =“!” / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
escape() 函數已被棄用,但可用於對感嘆號、單引號、左括號和右括號進行 URL 編碼。 並且由於是否必須在 URL 中編碼星號存在一些歧義,並且編碼並沒有什么壞處,因此您可以使用諸如 replace() 函數調用之類的方法進行顯式編碼。 [請注意,escape() 函數作為第二個參數傳遞給第一個 replace() 函數調用。 如此處所用,replace 為 !、'、( 或 ) 的每個匹配的特殊字符調用一次 escape() 函數,escape 僅返回該字符的“轉義序列”以供替換,從而將任何轉義字符與另一個重新組合片段。]
另請參閱“https://stackoverflow.com/questions/6533561/urlencode-the-asterisk-star-character”
此外,雖然一些網站甚至將 asterkisk(*) 標識為 RFC3986 下的保留字符,但它們並未將其包含在其 URL 組件編碼工具中。
未編碼的 URL 參數:
parm1=this is a test of encoding !@#$%^&*()'
parm2=note that * is not encoded
編碼的 URL 參數:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.