說,我有一個中間接手的需求,什么叫中間接手呢,就是這個功能已經上線了,並且已經產生數據了,現在要對這個功能進行修改,所以既要滿足當下開發的需求,又要兼容以前的功能。簡單說來,就是我們有一個后台添加商品的功能,之前是前端寫的后台頁面,這次進行了平台切換,所以是后端寫的頁面。於是對於數據,就有了些變化,具體如下:
一、老版實際情況
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:本次主要是對字符串進行處理,總結就是,既要能按格式保存數據,又要能還原原來的數據格式,當然還要更好的方法,和實現過程,歡迎大家的評論留言,謝謝!
