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

前几天接到个要给图片添加水印的要求,对象存储使用的是百度的,添加水印的方式就是在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 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 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年前

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