可行的字符 base64 URL 安全函数

29

这个字符串可能返回哪些字符范围?

function base64url_encode($data) 
{ 
  return rtrim(strtr(base64_encode($data), '+/', '-_'), '='); 
} 

我猜测是[a-z0-9-_]


base64是区分大小写的。因此应该是a-zA-Z0-9-_。 - Jonathan Kuhn
2个回答

48

Base64编码的字符串可能包含字符a-z A-Z 0-9 + / =

你需要去掉右边的填充符=,并将+替换为-,将/替换为_

因此,在您的情况下,可能的字符是a-z A-Z 0-9 - _

更多信息


45
可能返回的字符范围包括:
  • A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z
  • a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z
  • 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
  • -(减号)和_(下划线)
在您的正则表达式中,应该写成[a-zA-Z0-9_-]

13
抱歉翻旧帖...但值得一提的是,base64encode 会在某些字符串结尾处添加 = 作为“填充”,以使字符串长度成为4的倍数。详见回答:https://dev59.com/k2855IYBdhLWcg3wKxHc#4492448 - haxxxton
5
在问题的base64url_encode函数中,@haxxxton和那些=被明确地进行了rtrim操作。我会尽力保持原意并使翻译更易懂,不过不包括解释或提供额外内容。 - salathe
5
@salathe同意,我只是觉得值得提一下base64encode的默认行为,因为当我在搜索它可能的值时,这是最先出现的帖子之一 :) - haxxxton
8
这个字符串中也有一个等于号'=',就像这样:"RElMR19OZXdzX0NlbnRyYWxfMjAxMTExMThfZGE2NTU0NjI0Zi5qcGc=.jpg" - Frederick G. Sandalo
2
@FrederickG.Sandalo请检查原始问题,等号(=)被修剪了。 - salathe
1
啊哈,我没有注意到那里有 rtrim() 函数。 - Frederick G. Sandalo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接