javascript - php无法解码js发过来的base64图片编码,有诡异空格
巴扎黑
巴扎黑 2017-04-11 13:11:36
[JavaScript讨论组]

我通过vue的axois通过post方法向php转图片编码,在php base64_decode解码的时候总是失败

发现

  1. 在php里,base64编码里的'+'号变成了空格

  2. 尝试用str_replace(' ', '+', $str)失败,无法替换

  3. 尝试用str_replace(' ', '%2B', $str)成功替换,还是无法解码

  4. 对比初始的base64编码和替换后的编码发现中间少了几行(我认为原因就出在这里)

  5. 后面尝试
    (1)在js里先将'+'号替换到'-',再在php里替换回来,同样上面3和4

(2)在js里使用encodeURIComponent,再在php里解码回来,同样上面3和4

啊啊啊,我主要是做前端的,php这方面不是很熟悉,查了很久资料都没找到解决方法,相当难受

代码:
JavaScript:

...
    this.$http.post('../info/publish.php', {
              name: this.name,
              description: this.description,
              cid: this.fenlei,
              price: this.price,
              image: this.base64,
              address: this.location
            }).then((res) => {
    //          console.log(this.base64);
              console.log(res.data);
            });
...

PHP:

...
$data = file_get_contents('php://input');
    $pName=json_decode($data)->name;
    $pDe=json_decode($data)->description;
    $cid=json_decode($data)->cid;
    $price=json_decode($data)->price;
    $image=json_decode($data)->image;
    $image1=str_replace(' ', '+', $image);
    // $image=urldecode($image);
    $address=json_decode($data)->address;
    $image=substr(strstr($image1,','), 1);
    $img=base64_decode($image);
...

巴扎黑
巴扎黑

全部回复(4)
黄舟

post数据是没必要encode的

阿神

我觉得这是php的锅,base64转码之后的图片,php解码应该是解码 'data:image/png;base64,' 后面的一串代码

$img = substr('img数据', 22);
file_put_contents('path', base64_decode($img));
天蓬老师

你在前端先把 base64 字符串中 + 号替换为 %2B ,然后 php 接收的时候再对 base64 串做 urldecode(base64) 解码试试

高洛峰

前端url编码后,在php那层没必要url解码,中间件如apache会自动解码的,包括post。
因此解决办法是js直接url编码image数据,后端php正常base64解码即可。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号