按 application/x-www-form-urlencoded 提交 form,哪些字符应该被 url-encode?
我不怎么熟悉 ASP.NET 前端和后端编程,我之所以发到这个坛子里,是因为你们熟悉 application/x-www-form-urlencoded。
我是搞 WinForm 开发的,不过遇到了 Post 提交网页数据:
Chrome 浏览器在以 application/x-www-form-urlencoded 提交数据时,url-encode 规则如下:
-_.* 4 个字符被认为是安全字符,不会被 Encode,空格被编码为加号,'+' 被编码为 %2B
不过,C# 的 Uri.EscapeDataString() 和另外几个 url 编码函数,都不是这个规则:
-_.*!() 共 7 个字符都被认为是安全字符,不会被 Encode,空格被编码为%20,'+' 被编码为 %2B
而 RFC 3986,仅认定 -_. 3个字符为安全字符,其余全部被用 %Hex 方式编码。
那问题来了,application/x-www-form-urlencoded 究竟应该怎么编码要提交的键值对啊?
如果一律按 RFC 3986 规则来编码,服务器能正确解码么?