【问题标题】:url-Encode vs Base64 encoding ( usages)?url-Encode vs Base64 编码(用法)?
【发布时间】:2012-05-03 07:12:33
【问题描述】:

我在想……

(除了 base64 的加号“+”在查询字符串中的问题 - 它被翻译为“空格”并且可以通过 %2b 解决) :---> 这是首选如何在查询字符串中传输数据?

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

  • btoa
  • encodeUriComponent

所以我问自己(和你):

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

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

编辑

我想我找到了问的原因......(以及为什么以前没有人问过)

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 就像我说的the problem that the definitions are different - but the implementations can be similar... - 仍然没有得到答案......:)
    • the implementations can be similar ?它具有定义中描述的不同用途。
    • 我也可以使用 base64 来传输userid=1 以及 encodeURIComponent ...我正在寻找差异。
    • encodeURIComponent() 如果您专门传递不会被编码的字符(即主要是字母数字),则只会占用更少的空间 - 任何实际编码的内容都会比 base64 占用更多的空间。例如btoa('::') 变为 Ojo=encodeURIComponent('::') 变为 %3A%3A - 并且随着字符数的增加而向上扩展。
    • @lucideer 在任何情况下都比btoa('::') 更通用,您需要执行 'btoa(encodeURIComponent(realWorldString))' 否则 btoa 将不起作用。您描述的情况是,“::”的输入在纯 ASCII 之外甚至没有一个字符。甚至 U+0100 中断。只要您需要编码(即多于 ASCII),无论如何您都需要 encodeURIComponent 并且将大小相加并且比较没有多大意义。
    【解决方案2】:

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

    '+' 不会被客户端翻译成 'space' - 它是自动翻译的一些服务器端应用程序到 'space',主要是出于向后兼容的原因(相反,一些服务器端应用程序会离开 '+' '+' 符合RFC3986)。

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

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

    【讨论】:

    • 考虑到必须将encodeURIComponent() 用于Unicode 字符> U+00FF 无论如何,btoa() 的用例以及因此建议的较小尺寸的优势非常有限
    【解决方案3】:

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

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

    【讨论】:

    • 我刚刚看到用户 meze 的另一个答案。我不知道他在说什么。我完全使用 base64 编码,因为它可以很好地处理 unicode 字符串。每天在我的几个网站上输入日语、中文、西里尔文,并通过这种方式传输。
    • Base64 仅适用于 ASCII,encodeURIComponent 确实适用于 unicode。在浏览器中尝试:window.btoa('✓ à la mode');
    • 啊哈,好吧,我不知道 btoa 是做什么的。当我谈论 base64 时,我的意思是泛泛而谈。我自己从 PHP 中使用它来将内容发送到客户端。
    猜你喜欢
    • 2013-05-11
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多