[Web] URL编码问题以及encodeURIComponent

因为历史原因,绝大多是的浏览器地址只能使用ASCII 编码的地址,虽然目前很多浏览器已经支持UTF-8 编码, 但是Javascript 在发送 ajax 请求的时候仍旧只能使用 ASCII 编码。在这种情况下,如果在query string 里使用了中文字符。那么服务端就很有可能收到乱码,从而造成传参错误。

很多文章建议说把服务端接收request 的编码设置为 gb2312 . 比如在ASP.NET 应用程序web.config 文件里设置

<globalization requestEncoding="gb2312" responseEncoding="utf-8"/>

只要加入这一行,javascript 甚至都支持中文传参数了. 但是这样设置只能使网站只接受英文和简体中文。

如果要使网站支持所有语言,则要用到 encodeURIComponnent() 这个javascript 方法了。 encodeURIComponent() 方法会把非 ASCII 编码的字符按照 UTF-8 编码转换成 ASCII 编码。 如此一来,服务端正常使用UTF-8 ,客户端支持所有语言字符的参数。

扩展阅读:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

http://unixpapa.com/js/querystring.html

http://blogs.msdn.com/b/ieinternals/archive/2014/04/22/internet-explorer-11-unicode-utf8-url-query-string-international.aspx

 

blog comments powered by Disqus