7. July 2015
AndrewZhu
Web
因为历史原因,绝大多是的浏览器地址只能使用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