【问题标题】:Escape Base64 String in URL?在 URL 中转义 Base64 字符串?
【发布时间】:2013-12-21 09:04:17
【问题描述】:

出于某种原因,我需要在 URL 中放置一个 Base64 编码的字符串,即

<script>
    var URL = "localhost:8080/MyApp/order?z=AAAAAAAEJs4"
</script>

URL 是由 Java 生成的,这里的问题是我只能使用 java 使 Base 64 编码的字符串对 URL 友好,而不是对 javascript 友好,所以 fire bug 给我以下错误:

SyntaxError: unterminated string literal

显然 Base64 字符串中有字符需要转义。但是我不能使用escape()URLencoding()方法,因为请求将直接传递给控制器​​并由java代码操作,所以这种情况下没有“下一页”。

那么如何实现呢?

【问题讨论】:

    标签: javascript jquery html jsp dom


    【解决方案1】:

    如果您尝试将该 z url 属性转换为可理解的字符串/变量,则必须使用库进行转换。下面是一个指向您必须加载的 Javascript 的 base64 库的链接。

    http://www.webtoolkit.info/javascript-base64.html

    您可能还需要一个库来访问您 url 中的 z 属性。我会推荐这个:

    https://github.com/allmarkedup/purl

    【讨论】:

      【解决方案2】:

      以防万一,这是一个不需要依赖的简短 JS 代码:

      String.prototype.base64EncodeUrl = function () {
          var str = this;
          str = window.btoa(unescape(encodeURIComponent( str )));
          return str.replace(/\+/g, '-').replace(/\//g, '_').replace(/\=+$/, '');
      };
      
      String.prototype.base64DecodeUrl = function () {
          var str = this, str_pad = (str + '===');
          str = str_pad.slice(0, str.length + (str.length % 4));
          str = str.replace(/-/g, '+').replace(/_/g, '/');
          return decodeURIComponent(escape(window.atob( str )));
      };
      

      【讨论】:

        猜你喜欢
        • 2010-10-29
        • 2021-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-26
        • 2020-12-22
        • 2011-07-01
        相关资源
        最近更新 更多