如何在不输出' /'的情况下将网址转换为base64字符?

时间:2016-07-30 23:02:58

标签: javascript node.js base64 urlencode

问题:我可以确定Base64编码的网址不会输出' /'字符?

背景:Firebase使用键/值结构及其键名per the docs

  

"可以包含除。之外的任何unicode字符。 $#[] /和ASCII   控制字符0-31和127"

我想使用网址作为我的某个系列的关键,但很明显,' /'和'。'使原始字符串成为禁止。

我的计划(我未结婚)是使用浏览器的功能(atob()btoa())或专用功能将网址转换为Base64 / NPM模块(as discussed here)。

但是,Base64输出可以包含' /',这会破坏Firebase规则。

网址可能包含的字符是否会生成' /'?

如果是这样,有什么理由我不应该在Base64编码功能的前面/后面添加一个简单的String.replace()吗?

3 个答案:

答案 0 :(得分:0)

在OP评论中提出建议(感谢ceejayoz,Derek),它看起来像这样会起作用:

let rawUrl = "http://stackoverflow.com/questions/38679286/how-can-i-convert-urls-to-base64-without-outputting-characters?noredirect=1#comment64738129_38679286";

let key = btoa(encodeURIComponent(url)); 
let decodedUrl = decodeURIComponent(atob(key));

rawUrl == decodedUrl // True

答案 1 :(得分:0)

您可以随时在base64编码后替换这些字符,然后在解码时再次替换。

const fireBase64 = {
  encode: (str) => btoa(str).replace(/\//g, '_'),
  decode: (b64) => atob(b64.replace(/_/g, '/'))
}

答案 2 :(得分:0)

base64字符串中的可能字符是

if

如果您不想<? curr_id = -1; while($comment = $result->fetch_object()) { if $comment->id != curr_id { curr_id = $comment->id ?> <p> <?=$comment->subject . ' by ' . $comment->username; ?> </p> <? } ?> <hr> <div class="nested_comment"> <p> <?=$comment->nc_subject; ?> </p> </div> ,只需将其替换为上面列表中不存在的其他字符,例如: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

&#13;
&#13;
/
&#13;
&#13;
&#13;