如何在 smarty 中进行 urlsafe_base64 编码?

How to do urlsafe_base64 encoding in smarty?

如何在smarty中进行urlsafe_base64编码? 我做了一个这样的函数:

function smarty_function_base($args, &$smarty){  
$data = base64_encode($args['str']);
$data = str_replace(array('+','/','='),array('-','_',''),$data);
return $data;  
}

它有效,但我想做这样的事情:

base64(host:port:protocol:method:obfs:base64pass/?obfsparam=base64param&protoparam=base64param&remarks=base64remarks&group=base64group&udpport=0&uot=0)

我用|cat:将两个字符串合为一个字符串:

 {$link=$value[1]|trim|cat:":"|cat:$info['port']|cat:":"|cat:$info['protocol']|cat:":"|cat:$info['obfs']|cat:":"}

但它不能做这样的事情:

{$link=$link|:cat(base str="some_string_to_be_encode")}

我该怎么做?

试试这些方法

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));
}

方法二

$encoded = urlencode( base64_encode( $str ) );
$decoded = base64_decode( urldecode( $encoded ) );

下面是有效的 base64 字符。

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=

已编辑:-

您可以在点赞之前将输出分配给一个聪明的变量

$smarty->assign('yourVarforsmarty', you_custom_function_name($url));

并且比在 smarty 模板中使用简单

{$yourVarforsmarty}

您还可以在 PHP 中创建 $smarty class 的地方创建修饰符:

$smarty->registerPlugin("modifier",'base64url_encode',  'base64url_decode');

然后在TPL中调用它:

{$string_to_encode|base64url_encode}