记一个JS获取base64编码地址图片传到后台时无法识别的坑

oy4年前 (2022-06-22)技术研究3340

事情是这样的,前端一个DIV用了属性加上图片背景,比如

<div class="posterbox" style="background-image: url("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAAAAAAQwAABtbnRyUkdCIFhZWiAAAAAAAAAAAAAAAABhY3NwAAAAAAAhIQg//2Q=="); background-position: center center; background-size: cover;"></div>

中间一长串的base64编码我就省略不写了


下面用JS来获取这串base64数值

// 获取元素的属性值
var img_base64 = $('.posterbox').css('background-image');
// console.log(img_base64);  显示:url("data:image/jpeg;base64,/9j/4AXXXXXX==")

// split分割取出上面属性中url()中间的base64
img_base64 = img_base64.split('(')[1].split(')')[0];


到此时img_base64变量就是这个base64的字符串,POST到后台,发现不是有效的base64字符串无法转储为图片。查看提交的数据,确实是包含此base64字符串的,同时打印出后端所接收到的字符串和前端一致,是合法完整的base64编码:

微信截图_20220622044716.png

查了很多百度的资料,说是base64编码在post过程中部分符号会被转义,前端要先urlencode,后端再decode。试过无效。


最后发现,原因竟然是在前端提交控制台所显示的base64字符串前后双引号"",不是代表这是字符串类型,而是真的有这个符号提交到后端。而后端var_dump()打印字符串的时候刚好也带有这个符号,看上去是相同的,这就是最坑的地方……


把双引号去掉,修改上述取url()中间base64部分的代码为:

img_base64 = img_base64.split('("')[1].split('")')[0];


最后再次提交,base64字符串没有双引号了,问题解决!

微信截图_20220622045302.png


之前在取img标签src为base64字符串的图片地址时无此问题,因为直接获取元素src的地址就可以了,没有双引号问题,这个url()地址是有双引号的,浪费我2个小时时间,我是真的是会谢。

相关文章

QQ全部TCP/UDP服务器地址 (截止 2010-06-08)

用法就不说了,通过搜索引擎找到本文的一定已经知道如何用了。笔者先在路由器上封堵来自笔者电脑的任何数据包,然后开始登录QQ,用抓包软件捕获到尝试连接的服务器:UDP服务器:sz.tencent.com…

快速搭建php+mySQL环境

下载地址http://phpnow.org/download.html当前版本包含 Apache-2.2.14 / 2.0.63PHP-5.2.12ZendOptimizer-3.3.3MySQL-5…

安全删除USB设备不用点 一键快捷搞定

安全删除USB设备不用点 一键快捷搞定

一般情况下,当插入闪存或其他可移动USB存储设备时,在系统托盘区会显示出一个绿色的弹出图标,以便让我们安全卸载USB设备。而当我们完成操作,要安全删除该设备时,最简单的方法是用鼠标左键点击这个绿色的图…

usbKiller  注册算法纯技术分析

usbKiller 注册算法纯技术分析

  PEID检查无壳,Borland Delphi 6.0 - 7.0,OD载入,F9运行,注册,输入假码:0123456789,确定,弹错误信息,F12暂停,显示调用 …

实践交流:如何统一Windows 7文件夹模板显示设置

实践交流:如何统一Windows 7文件夹模板显示设置

一、优化Windows 7文件夹优化文件夹方法很简单,很多网友都熟悉,这里简要介绍一下:在需要优化的文件夹上,点击鼠标右键选择属性,或者打开需要优化的文件,然后再按下ALT键,在工具栏菜单中,点击&l…

电脑系统时间同步更新时提示“RPC服务器不可用”解决办法

在对电脑系统时间进行“自动与Internet时间服务器同步”的时候,一点击“立即更新”,就会出现提示:“RPC服务器不可用”。一…

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。