Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript url编码与Base64编码(用法)?_Javascript_Asp.net_Query String_Base64_Encodeuricomponent - Fatal编程技术网

Javascript url编码与Base64编码(用法)?

Javascript url编码与Base64编码(用法)?,javascript,asp.net,query-string,base64,encodeuricomponent,Javascript,Asp.net,Query String,Base64,Encodeuricomponent,我在想 (除了查询字符串中base64加“+”符号的问题-该问题被转换为“space”,可由%2b解决):-->在查询字符串中传输数据的首选方法是什么 这两个功能都可以通过JS命令使用: btoa encodeUriComponent 所以我问我自己(和你): 我应该在什么时候使用什么?(我总是本能地使用encodeuricomponent) 问题在于定义不同-但实现可能相似 编辑 我想我找到了问的理由。。。。(为什么以前没人问这个问题) fwiw,每当我想在服务器和客户端之间传输任何可以是

我在想

(除了查询字符串中base64加“+”符号的问题-该问题被转换为“space”,可由%2b解决):-->在查询字符串中传输数据的首选方法是什么

这两个功能都可以通过JS命令使用:

  • btoa
  • encodeUriComponent
所以我问我自己(和你):

我应该在什么时候使用什么?(我总是本能地使用
encodeuricomponent

问题在于定义不同-但实现可能相似

编辑 我想我找到了问的理由。。。。(为什么以前没人问这个问题)


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


因此,简而言之:需要unicode输入/输出,始终使用base64传输。

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

encodeURIComponent仅对特殊字符进行编码

有趣的是,如果没有encodeURIComponent,就无法将base64应用于unicode字符串:

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

'+'不会由客户端转换为'space',而是由一些服务器端应用程序自动转换为'space',这主要是出于向后兼容性的原因(相反,一些服务器端应用程序会将'+'保留为'+'

就客户端而言-
btoa()
encodeURIComponent()
(和
encodeURI()
escape()
)只需根据不同的编码或转义算法将文本字符串编码成不同的抽象字符串-
btoa()
通常使用base64编码生成最小的结果字符串,但这里值得考虑re:unicode


需要注意的重要事项是您的服务器端应用程序是什么(在您的案例中,一些基于ASP.NET的设置)然后使用将该字符串解码回其原始形式。

正如我所说的
问题是定义不同-但实现可能相似…
-仍然没有得到答案:)
实现可能相似
?它有定义中描述的不同用途。我还可以使用base64传输
userid=1
,也可以使用encodeURIComponent。。。我在寻找区别。如果只传递不会编码的字符(即,大部分是字母数字),则encodeURIComponent()只会占用更少的空间-任何实际编码的字符都会占用比base64多得多的空间。e、 g.
btoa(“::”)
变为
Ojo=
,而
encodeURIComponent(“:”)
变为
%3A%3A
-并且baloon向上具有更大的字符数。@lucideer在任何情况下都比
btoa(“:”)更通用。
您需要执行“btoa(encodeURIComponent(realWorldString)),否则btoa将无法工作。您描述的情况是,“::”的输入在纯ASCII之外甚至没有一个字符。即使U+0100也会中断。只要您想要编码(即,超过ASCII),您就需要encodeURIComponent,并且大小相加,比较没有多大意义。我刚才看到了用户meze的另一个答案。我不知道他在说什么。我使用base64编码正是因为它能很好地处理unicode字符串。在我的几个网站上,日文、中文和西里尔文的输入每天都以这种方式传输。Base64仅适用于ASCII,encodeURIComponent适用于unicode。在浏览器中尝试:
window.btoa('✓ la mode')啊哈,我不知道btoa做什么。当我谈论base64时,我的意思是它是一个一般的东西。我自己从PHP中使用它来向客户端发送内容。考虑到Unicode字符>U+00FF必须使用
encodeURIComponent()
,因此
btoa()
的使用案例以及建议的较小尺寸优势非常有限