问题:我可以确定Base64编码的网址不会输出' /'字符?
背景:Firebase使用键/值结构及其键名per the docs,
"可以包含除。之外的任何unicode字符。 $#[] /和ASCII 控制字符0-31和127"
我想使用网址作为我的某个系列的关键,但很明显,' /'和'。'使原始字符串成为禁止。
我的计划(我未结婚)是使用浏览器的功能(atob()
和btoa()
)或专用功能将网址转换为Base64 / NPM
模块(as discussed here)。
但是,Base64输出可以包含' /',这会破坏Firebase规则。
网址可能包含的字符是否会生成' /'?
如果是这样,有什么理由我不应该在Base64编码功能的前面/后面添加一个简单的String.replace()
吗?
答案 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;