转义URL中的Base64字符串

Escape Base64 String in URL?

本文关键字:字符串 Base64 中的 URL 转义      更新时间:2024-03-16

由于某些原因,我需要在URL中放入Base64编码的字符串,即

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

URL是由Java生成的,这里的问题是我只能使用Java使Base64编码的字符串对URL友好,但对javascript不友好,所以firebug给了我以下错误:

SyntaxError: unterminated string literal

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

那么,如何让它发挥作用呢?

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

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

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

https://github.com/allmarkedup/purl

为了以防万一,这里有一个不需要依赖项的简短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 )));
};