国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

PHP結(jié)合vue導(dǎo)出excel出現(xiàn)亂碼的解決方法分享

瀏覽:9日期:2022-06-06 17:34:19

在這之前我們先回顧以前用php導(dǎo)出excel,我直接寫成方法在這里:

public static function phpExcelList($field, $list, $title="文件",$file_time){$spreadsheet = new Spreadsheet();$sheet = $spreadsheet->getActiveSheet();foreach ($list as $key => $value) {    foreach ($field as $k => $v) {if ($key == 0) {    $sheet->setCellValue($k . "1", $v[1]);}$i = $key + 2; //表格是從2開始的$sheet->setCellValue($k . $i, $value[$v[0]]);    }}ob_clean();header("Content-type:application/vnd.ms-excel;charset=UTF-8");header("Content-Type: application/vnd.ms-excel");header("Content-Disposition: attachment;filename="".$title.".csv"");header("Cache-Control: max-age=0");$writer = new Csv($spreadsheet);$writer->save("php://output");exit;    }

一般有設(shè)置charset基本在前端就沒啥問題,問題就在于vue導(dǎo)出時(shí)就出現(xiàn)亂碼了,有可能是這個(gè),大多數(shù)網(wǎng)友的解決方案就是在請(qǐng)求里邊加上參數(shù):responseType: 'blob', // 表明返回服務(wù)器返回的數(shù)據(jù)類型,但這里我已經(jīng)提前申明返回的數(shù)據(jù)是正常的,這時(shí)候又會(huì)咋樣呢?

咱們?cè)囋囉脟?guó)產(chǎn)的wps打開吧:

咦?沒問題?再用office打開:啊哈》》?what?

那問題出在哪里呢?讀入的文件是utf-8格式,下載下來Excel打開亂碼,但是用其他編輯器打開并不是亂碼,一開始解決問題的思路是,下載文件的時(shí)候,是不是沒有指定編碼方式,導(dǎo)致文件編碼方式不對(duì),于是乎使用了Blob里的type參數(shù),硬塞了一個(gè)類型以及編碼方式,但是這種方法似乎并不管用,仔細(xì)讀了官方文檔之后,關(guān)于type的解讀如下:

type,默認(rèn)值為 “”,它代表了將會(huì)被放入到blob中的數(shù)組內(nèi)容的MIME類型。

這里明確表明,此type只是一個(gè)類型標(biāo)記,并不會(huì)起到轉(zhuǎn)碼的作用,想想也是,blob僅僅是內(nèi)存里開辟的0,1代碼,怎么可能在下載的過程中去解碼編碼呢?

發(fā)現(xiàn)這其實(shí)是微軟家的坑,微軟家發(fā)明了一個(gè)東西叫bom頭,關(guān)于bom頭:

類似WINDOWS自帶的記事本等軟件,在保存一個(gè)以UTF-8編碼的文件時(shí),會(huì)在文件開始的地方插入U(xiǎn)TF-8 BOM頭。記事本等編輯器通過它來識(shí)別這個(gè)文件是否以UTF-8編碼(當(dāng)然即便沒有UTF-8 BOM頭記事本也能通過其它方式正確識(shí)別UTF-8編碼)。

那么如果一個(gè)UTF-8編碼的字符串的開頭處沒有BOM頭又會(huì)發(fā)生什么?答:不認(rèn)識(shí)你,亂碼給你看

所以我們?cè)谶@需要手動(dòng)加一個(gè)微軟看得懂的BOM頭:

window.URL.createObjectURL(new Blob(['\uFEFF' + content]))

總的代碼示例如下,不懂可以直接抄:

this.$http.get(common.webapi+"/api/exportExcel",{params:{參數(shù)名稱:參數(shù)值}}, {emulateJSON:true,responseType: "blob"}).then((res)=>{      if(res.data){      const link = document.createElement("a");// 創(chuàng)建a標(biāo)簽      let blob = new Blob(["\uFEFF" + res.data],{type: "application/vnd.ms-excel;"}); // 設(shè)置文件類型并在返回值前加bom頭,避免亂碼      link.style.display = "none";      link.href = URL.createObjectURL(blob); // 創(chuàng)建URL      link.setAttribute("download", "數(shù)據(jù)"+ this.$moment(new Date().getTime()).format("YYYY-MM-DD")+".csv");      document.body.appendChild(link);      link.click();      document.body.removeChild(link);      //如果不會(huì)出現(xiàn)亂碼,直接一句代碼搞定:this.$fileDownload(res.data, "發(fā)票數(shù)據(jù)"+ this.$moment(new Date().getTime()).format("YYYY-MM-DD")+".csv")     }     })

//如果不會(huì)出現(xiàn)亂碼,直接一句代碼搞定:this.$fileDownload(res.data, "數(shù)據(jù)"+ this.$moment(new Date().getTime()).format("YYYY-MM-DD")+'.csv'),接下來就是見證奇跡的時(shí)刻:

到此這篇關(guān)于PHP結(jié)合vue導(dǎo)出excel出現(xiàn)亂碼的解決方法分享的文章就介紹到這了,更多相關(guān)PHP導(dǎo)出excel出現(xiàn)亂碼內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標(biāo)簽: PHP
主站蜘蛛池模板: 亚洲性在线| 亚洲怡红院在线 | 99精品视频在线在线视频观看 | 又黄又刺激下面流水的视频 | 波多野结衣在线播放 | 亚洲精品一区二三区在线观看 | 另类专区另类专区亚洲 | 99热久久国产这里是精品 | 国产精品1区2区3区在线播放 | 一级片免费的 | 亚洲成人黄色片 | 毛片96视频免费观看 | 亚州视频一区二区 | 一区二区三区四区在线视频 | 欧美α一级毛片 | 国产精品日本欧美一区二区 | 69国产成人综合久久精品91 | 亚洲精品成人一区二区aⅴ 亚洲精品成人一区二区www | 色久在线 | 手机在线播放视频 | 一级做a爰片久久毛片看看 一级做a爰片久久毛片鸭王 | 男人天堂视频网站 | 欧美三级一级 | 国产浮力第一页草草影院 | 特级淫片国产免费高清视频 | 久久久99精品免费观看精品 | 日本a级特黄三级三级三级 日本a一级片 | 99精品视频在线在线视频观看 | 日韩欧国产精品一区综合无码 | 亚洲一级黄色毛片 | 亚洲精品一区二区三区在 | 欧美在线一级精品 | 亚洲免费网站观看视频 | 米奇777色狠狠8888影视 | 日韩不卡在线 | 成人男男黄网色视频免费 | 人与禽的免费一级毛片 | 特级毛片8级毛片免费观看 特级毛片免费观看视频 | 成人午夜爽爽爽免费视频 | 午夜成年女人毛片免费观看 | 亚洲综合性 |