url-Encode vs Base64编码(用法)?

时间:2012-04-22 11:36:59

标签: javascript asp.net query-string base64 encodeuricomponent

我在想......

(除了base64在查询字符串中加上'+'符号的问题 - 它被翻译为'space'并且可以通过%2b解决):--->这是在查询字符串中传输数据的首选方法吗?

这两个函数都可以通过JS命令使用:

  • btoa
  • encodeUriComponent

所以我问自己(和你):

何时我应该使用什么? (我一直使用encodeUriCompoonent - 本能)。

定义不同的问题 - 但实现可能类似......

修改

我想我已经找到了询问的原因....(以及之前没人问过的原因)

enter image description here

3 个答案:

答案 0 :(得分:12)

base64 用于传输二进制数据。 (在IE中不支持,无法编码空间字符。)

encodeURIComponent 仅对特殊字符进行编码。

有趣的是,如果没有encodeURIComponent,你不能将base64应用于unicode字符串: https://developer.mozilla.org/en/DOM/window.btoa

答案 1 :(得分:3)

答案完全取决于您的服务器端应用程序。

'+' 未被客户端翻译为 'space' - 它已自动翻译一些服务器端应用程序的 'space' ,主要是出于向后兼容的原因(相反,一些服务器端应用程序将离开 '+' 符合<{3}}的 '+'

就客户而言 - btoa()encodeURIComponent()(以及encodeURI()escape())只是根据不同的编码将一串文本编码为不同的抽象字符串或转义算法 - btoa()通常使用 base64 编码生成最小的结果字符串,但RFC3986 re:unicode值得在此考虑。

需要注意的重要一点是,您的服务器端应用程序(在您的情况下是一些基于ASP.NET的设置)然后用于将该字符串解码回原始形式。

答案 2 :(得分:-1)

fwiw,每当我想在服务器和客户端之间传输任何可以是unicode的东西时,我都会使用base64。 urlencode并不能很好地处理所有unicode charachters。所有的百分号都很快搞得一团糟。

所以,简而言之:期待unicode输入/输出,总是base64运输。