从表单GET查询参数解码URL'+'到'%20'

时间:2015-02-19 09:44:51

标签: javascript url urlencode url-encoding

我在html页面中使用了元刷新标记。 html页面有一个表单。当此页面自动刷新时,所有表单参数都作为HTTP GET参数附加到url。

问题: 所有空格字符,即'%20'都会自动转换为'+'。但我的FORM Query params本身可能会有'+'字符。所以

  • 如何停止用'+'替换空格并使用'%20'返回编码空间?

OR

  • 如何正确编码和解码Form params以正确区分空格代表'+'和文字参数'+'?

E.G。

properTitle =“这是正确解码用'+'替换的HTTP表单参数空间的示例” encodeURIComponent(properTitle): 此%图20是%20example%20for%20correctly%20decoding%20HTTP%20Form%20parameters%20space%20replaced%20with%20 '%2B'

escape(properTitle):此%20is%20example%20for%20correctly%20decoding%20HTTP%20Form%20parameters%20space%20replaced%20with%20%27 +%27

元刷新后 skewedTitle =“这+是+示例+ +正确+解码+ HTTP +表格+参数+空格+替换+ +'+'”

decodeURIComponent(skewedTitle):这个+是+示例+ +正确+解码+ HTTP +表格+参数+空格+替换+ + + + +

escape(skewedTitle):这个+是+示例+ +正确+解码+ HTTP +表格+参数+空格+替换+ + +%27%252B%27

P.S:我已经引用了类似的问题,但没有帮助。

When to encode space to plus (+) or %20?

In a URL, should spaces be encoded using %20 or +?

编辑1: 感谢@Bergi,我通过在刷新之前手动将'+'字符编码为'%2b'来解决了我的问题。元刷新后'%20'转换为'+',与'%2b'不同。难道不应该有适当的方法来处理这种编码和解码吗?

2 个答案:

答案 0 :(得分:0)

使用decodeURIComponent()解码网址。

修改

var str = "Happy%20Day";

然后做

str = str.replace("%20", " ");

答案 1 :(得分:0)

看看以下内容,可能对您有帮助 -

  

HttpUtility.UrlEncode("Stack Overflow") --> "Stack+Overflow"

  Uri.EscapeUriString("Stack Overflow") --> "Stack%20Overflow"

  Uri.EscapeDataString("Stack + Overflow") --> Also encodes "+" to "%2b" ---->Stack%20%2B%20%20Overflow