百度云对象存储添加水印,文字编码错误如何解决

前几天接到个要给图片添加水印的要求,对象存储使用的是百度的,添加水印的方式就是在url地址上添加参数就可以了。

问题:百度那边要求的是,需要添加水印的文字必须使用url 安全的base64编码,我百度搜了下,搜到的是这个代码

function url_b64encode($string) {
    $data = base64_encode($string);
    $data = str_replace(array('+','/','='),array('-','_',''),$data);
    return $data;
}

然后我按照这个编码后,总有几个图片是编码错误

百度云对象存储添加水印,文字编码错误如何解决

然后我就提了工单,对面工程师也没啥办法(可能都没php的工程师了),叫我用工具转。这问题折磨了我几天,然后我就用chatgpt(这玩意搜开发方面的问题无敌!!)反复的去锻炼它!

百度云对象存储添加水印,文字编码错误如何解决

最后终于对了,下面是成功的代码

$base64_str = base64_encode($str);
$urlsafe = str_replace(['+', '/'], ['-', '_'], $base64_str).str_repeat('=', 3 - (strlen($base64_str) + 3) % 4);

最后吐槽下,百度智能云的文档真的烂。我感觉已经很久不更新了,但是客服的态度不错

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2

也可以试下官方文档下的用户笔记
www.php.net/manual/zh/function.bas...

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));
}
1年前 评论
Laravel_Panda (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!