簡體   English   中英

url 中的 escaping 特殊字符

[英]escaping special character in a url

我正在使用 url 打開 html 頁面,並且我正在使用頁面 url 的查詢字符串中發送數據。

例如: abc.html?firstParameter=firstvalue&seconedParameter=seconedvalue

問題是如果參數中的firstvaluesecondvalue包含特殊字符,如#,(,),%,{ ,那么我的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM