我使用一个URL打开一个HTML页面,我在查询字符串枝条页面的URL发送数据。
例如: abc.html?firstParameter=firstvalue&seconedParameter=seconedvalue
问题是,如果firstvalue
或secondvalue
的参数包含像特殊字符#,(,),%,{
,然后我的网址是不是建设小康。 在这种情况下网址不验证。 我做这一切javascript
。 任何机构可以请帮我出这一点。
我使用一个URL打开一个HTML页面,我在查询字符串枝条页面的URL发送数据。
例如: abc.html?firstParameter=firstvalue&seconedParameter=seconedvalue
问题是,如果firstvalue
或secondvalue
的参数包含像特殊字符#,(,),%,{
,然后我的网址是不是建设小康。 在这种情况下网址不验证。 我做这一切javascript
。 任何机构可以请帮我出这一点。
你有3种选择:
escape() will not encode: @*/+
encodeURI() will not encode: ~!@#$&*()=:/,;?+'
encodeURIComponent() will not encode: ~!*()'
但是,在你的情况,如果你想要一个URL传递到其他页面的GET参数,你应该使用逃生或encodeURIComponent方法,但并非是encodeURI。
为了安全起见,确保你已经逃脱了所有在这两个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