说,我有一个中间接手的需求,什么叫中间接手呢,就是这个功能已经上线了,并且已经产生数据了,现在要对这个功能进行修改,所以既要满足当下开发的需求,又要兼容以前的功能。简单说来,就是我们有一个后台添加商品的功能,之前是前端写的后台页面,这次进行了平台切换,所以是后端写的页面。于是对于数据,就有了些变化,具体如下:

一、老版实际情况

  1、商品的添加,字段有商品的属性,包括名称、价格、积分这些就不说了,直接是一个input提交过来的,主要是商品详情,就是平时大家购物,往下滑动查看到的商品图文详情,例如下面图1。就是产品详情那一块,由后台添加多张规格相当的图片,然后首位拼接在一起,就类似我们经常看见的“长微信聊天截图一样”。查看前端代码,发现具体实现过程是:将每一张上传的图片的完整地址,再加上“<img src=”和“<param>”标签,然后拼接在一起,然后encodeURIComponent()进行编码,如图4Js代码:

  2、现在功能是变更了平台,就是服务器换了,之前的资源地址,访问有效,但是不再继续添加,添加的新商品图片地址存在新的服务器里面。并且由后端对数据格式进行处理,为了保持访问端,就是客户访问端页面不做任何修改,所以提交的数据格式,还是保持如上不变,只是实现方式又后端实现。

二、新版PHP实现方式

  1、前端在添加图片的时候,只用传多张图片的URL地址,数组格式。然后对这些URL资源地址进行拼接,然后写入数据库,代码如下:


$content_arr = [
  '0' => '/upload/goods/20190722/f4aed6055dfeb6f9f6db41095bb2777a.jpg',
  '1' => '/upload/goods/20190722/f4aed6055dfeb6f9f6db41095bb4578f.jpg',
  '2' => '/upload/goods/20190722/f4aed6055dfeb6f9f6db41095bb2575e.jpg',
]
//定义一个商品详情
$content = '';
//对传过来的商品图片数组进行处理
foreach($content_arr as $k=>$v){
if(!$k){
//第一张为商品主图片
$info['image'] = request()->domain().$v;
}else {
//剩余为商品详情,进行拼接
$content .= '<img src='.'"'. request()->domain().$v.'"'.' /><param>';
}
}
//最后进行编码
$info['content'] = rawurlencode($content);
//最后得到就是
$info['content'] = "%3Cimg%20src%3D%22http%3A%2F%2Fniushop.jingjinglego.com%2Fupload%2Fgoods%2F20190722%2Ff4aed6055dfeb6f9f6db41095bb2777a.jpg%22%20%2F%3E%3Cparam%3E%3Cimg%20src%3D%22http%3A%2F%2Fniushop.jingjinglego.com%2Fupload%2Fgoods%2F20190722%2F042ae67a6fd89faee455527ac10ca877.png%22%20%2F%3E%3Cparam%3E";

  2、后端展示,因为后端页面的展示有所变化,之前前端写的是直接获取原数据后进行解码,然后插入到页面里面,这次后端实现的方式是,对rawurlencode()编码后的数据进行还原,还原成传过来数组格式$content_arr一样:代码实现如下

$we7_set = new We7AdminSet();
//前端传来的商品id
$id = request()->get('id',0);
if($id){
$goods_info = $we7_set->getEidGoodsWay($id);
$content = rawurldecode($goods_info['content']);//对原数据进行解码
$content = str_replace("<img src=","",$content);//替换调标签字符
$content = str_replace("<param>", ",", $content);
$content = str_replace(" />", "", $content);
$content = str_replace('"', "", $content);
$content = str_replace(request()->domain().'/', "", $content);//替换掉域名前缀
$content = rtrim($content,",");//去除前后杂质
$content = explode(",", $content);//转成数组
$goods_info['image'] = str_replace(request()->domain().'/', "", $goods_info['image']);
array_unshift($content,$goods_info['image']);//将商品主图片追加进去
$goods_info['content'] = $content;
$this->assign("goods_info", $goods_info);//获取修改商品数据
}

  3、里面主要是用到编码rawurlencode()解码rawurldecode()方法,和字符替换str_replace(str,string)方法,还有往数组第一个位置添加一个元素array_unshift(array,value)的方法。

  ps:本次主要是对字符串进行处理,总结就是,既要能按格式保存数据,又要能还原原来的数据格式,当然还要更好的方法,和实现过程,欢迎大家的评论留言,谢谢!

PHP代码篇(四)--将字符串按指定字符切割的更多相关文章

  1. JavaScript trim 实现(去除字符串首尾指定字符)

    String.prototype.trim = function (char, type) { if (char) { if (type == 'left') { return this.replac ...

  2. C#去掉字符串头尾指定字符

    private void button2_Click(object sender, EventArgs e)        {//去掉字符串头尾指定字符            string MyInf ...

  3. Excel中如何截取字符串中指定字符后的部分字符

    1.如何给某列属性为时间整体加一个时间值:      场景一:假如我有一个excel中的某一列如下图所示,如何将该列的时间(用B代替整列)整体加一分钟呢?方法很简单,在空白单元格填写时间格式图中A所示 ...

  4. JavaScript trim 实现去除字符串首尾指定字符的简单方法

    String.prototype.trim = function (char, type) { if (char) { if (type == 'left') { return this.replac ...

  5. python 统计字符串中指定字符出现次数的方法

    python 统计字符串中指定字符出现次数的方法: strs = "They look good and stick good!" count_set = ['look','goo ...

  6. C# - 怎么截取字符串中指定字符及其后面的字符

    方法1:去掉空格以及后面的字符   //怎么截取让date的值为"2011/12/9",即去掉空格以及后面的字符   string date = "2011/12/9 2 ...

  7. JS字符串截取 “指定字符” 前面和后面的内容!

    JS字符串截取 “指定字符” 前面和后面的内容! var string= "07/12" var before = string.split('/')[0] var after = ...

  8. C# 移除字符串头尾指定字符

    1 private void button1_Click(object sender, EventArgs e) 2 {//去掉字符串头尾指定字符 3 string MyInfo= "--中 ...

  9. C++字符串按照指定规则切割的功能模板类,常用的一段检测记录运行时间的代码

    template <typename T> struct vector_split { typedef typename std::vector<T>::iterator it ...

随机推荐

  1. .Net Core MVC理解新管道处理模型、中间件

    .Net Core中间件官网:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/middleware/?view=aspnetcore ...

  2. OC深浅复制

    浅复制:指针的复制 深复制:内容的复制 主要有两个关键字  copy 和mutablecopy 对于基本类型 判断深浅方法 1.只要=右边从创建到赋值,至少包含一个NSMutable便会重新生成一个对 ...

  3. Python安装常见问题(1):zipimport.ZipImportError: can't decompress data(此问题不解决pip安装不成功)

    在CentOS以及其他的Linux系统中遇到安装包安装错误的原因,大多数都是因为缺少依赖包导致的,所以对于错误:zipimport.ZipImportError: can’t decompress d ...

  4. [日常] 解决mysql localhost可以连接但是127.0.0.1不能连接

    在测试mysql的过程中遇到使用localhost可以连接但是127.0.0.1不能连接,原因是localhost使用的本地socket连接,127.0.0.1使用使用的tcp连接 在mysql库的u ...

  5. 算法设计与分析 1.2 不一样的fibonacci数列

    ★题目描述 fibonacci 数列的递推公式是F(n) = F(n-1) + F(n-2)(n >= 2 且 n 为整数). 将这个递推式改为F(n) = aF(n-1) + bF(n-2)( ...

  6. python中copy()和deepcopy()详解

    **首先直接上结论: —–我们寻常意义的复制就是深复制,即将被复制对象完全再复制一遍作为独立的新个体单独存在.所以改变原有被复制对象不会对已经复制出来的新对象产生影响.—–而浅复制并不会产生一个独立的 ...

  7. 加速自己的hexo,使用GitHub+Coding实现国内外网站加速

    在配置好hexo之后,我们发现访问网站很慢,但又不是我们使用的主题的问题,那么就是网络环境的影响,即使我们使用了CDN加速,但还是没有我们国内的网站访问起来快速,(听说去美国的服务器要经过太平洋下面的 ...

  8. prerender-spa-plugin预渲染踩坑

    为什么要使用预渲染? 为了应付SEO(国内特别是百度)考虑在网站(vue技术栈系列)做一些优化.大概有几种方案可以考虑: 服务端做优化: 第一,ssr,vue官方文档给出的服务器渲染方案,这是一套完整 ...

  9. perl: warning: Setting locale failed. 解决

    perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAG ...

  10. Python变量与内存管理

    Python变量与内存管理 –与C语言中的变量做对比,更好的理解Python的变量. 变量 变量在C语言中  全局变量:其存放在内存的静态变量区中.  局部变量:代码块中存放在内存的代码区当中,当被调 ...