如何在Laravel中使用Base64编码API URL?

3

如何在Laravel中使用Base64编码URL?

我需要像这样的东西:

原始URL:http://localhost/dashboard/api/test/

编码后URL:http://localhost/dashboard/YXBpL3Rlc3Qv


谢谢 @Ankuraggrwal - Ram Solanki
2个回答

2
如果您正在使用路由,您可以像这样做:
Route::get('/dashboard/{code}', function($code){
     $url = base64_decode($code);
     //redirect according to $url ... for example "api/test/"
     return redirect( $url );
});

你可以根据最初生成的方式,从base64生成$url ... 你可以通过从当前用户或日期生成它来使其动态化 ... 要有创意。 - Sodj
如果新的base64 URL是静态的(始终相同),我不明白为什么你应该改变它...这是不好的做法。 - Sodj

2

我找到了这段代码,它对我很有帮助。我只是想找一个可以去掉base64字符串中“=”符号的东西,就像这样:

Original Answer翻译成"最初的回答"

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

    function base64url_decode($data) {
      return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT));
    }
?>

最初的回答

例子:

dump(rtrim(strtr(base64_encode('Hello World'), '+/', '-_'), '='));
$encodedString = rtrim(strtr(base64_encode('Hello World'), '+/', '-_'), '=');
dd(base64_decode(str_pad(strtr($encodedString, '-_', '+/'), strlen($encodedString) % 4, '=')));

我希望能对某些人有所帮助。

最初的回答


好的解决方案。然而,在这里使用str_pad()既是不正确的,也是不必要的。因为% 4始终小于4,并且传递的字符串很可能比4个字符更长,所以永远不会添加填充。而且,base64_decode()无关紧要的结束时的'='填充。 - Ken

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