在URL转义特殊字符(escaping special character in a url)

2019-06-24 21:06发布

我使用一个URL打开一个HTML页面,我在查询字符串枝条页面的URL发送数据。

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

问题是,如果firstvaluesecondvalue的参数包含像特殊字符#,(,),%,{ ,然后我的网址是不是建设小康。 在这种情况下网址不验证。 我做这一切javascript 。 任何机构可以请帮我出这一点。

Answer 1:

你有3种选择:

escape() will not encode: @*/+

encodeURI() will not encode: ~!@#$&*()=:/,;?+'

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

但是,在你的情况,如果你想要一个URL传递到其他页面的GET参数,你应该使用逃生或encodeURIComponent方法,但并非是encodeURI。



Answer 2:

为了安全起见,确保你已经逃脱了所有在这两个RFC 1738和RFC 3986,你应该使用encodeURIComponent方法的组合中规定的保留字符,逃生和更换为星号(“*”)是这样的:

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

[说明]尽管RFC 1738:统一资源定位器(URL)指定*,”,(和)字符可以在URL未编码左,

因此,只有字母数字,特殊字符“$ -_。+!*'()”,和用于各自保留目的的保留字符可以在URL中使用未编码。

RFC 3986,第12-13页,指出,这些特殊字符保留为子分隔符。

保留= GEN-delims /子delims

GEN-delims = “:”? “”/ “/”/ / “#”/ “[”/ “]”/ “@”

子delims = “!” / “$”/ “&”/ “ ''/”( “/”) “/” * “/” + “/”, “/”,“ / “=”

该escape()函数已被弃用,但可用于URL编码感叹号,单引号,左括号和右括号。 而且,由于没有对是否有星号必须在URL中编码的一些不确定性,而且它不会伤害到编码,它可以明确地使用类似的替换()函数调用进行编码。 [注意转义()函数被作为传递第二参数与第一替换()函数调用 。 这里所使用的,对于每一个匹配的特殊字符替换调用escape()函数一次!”,(或)和逃避只是返回‘转义序列’该字符回更换,这重新组合任何转义字符与其他片段。]

另见“https://stackoverflow.com/questions/6533561/urlencode-the-asterisk-star-character”

同时也有些网站甚至已经确定的asterkisk(*)作为RFC3986下保留字符,它们不包括在其URL分量编码工具 。

未编码的URL PARMS:

parm1=this is a test of encoding !@#$%^&*()'
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


文章来源: escaping special character in a url