最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2023年02月03日 11:04:38   作者:黃啊碼  
這篇文章主要為大家詳細(xì)介紹了PHP結(jié)合vue導(dǎo)出excel出現(xiàn)亂碼的解決方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

在這之前我們先回顧以前用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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PHP+Javascript實(shí)現(xiàn)在線拍照功能實(shí)例

    PHP+Javascript實(shí)現(xiàn)在線拍照功能實(shí)例

    這篇文章主要介紹了PHP+Javascript實(shí)現(xiàn)在線拍照功能的方法,涉及javascript插件的使用及php圖片上傳的相關(guān)實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • PHP編程實(shí)現(xiàn)csv文件導(dǎo)入mysql數(shù)據(jù)庫(kù)的方法

    PHP編程實(shí)現(xiàn)csv文件導(dǎo)入mysql數(shù)據(jù)庫(kù)的方法

    這篇文章主要介紹了PHP編程實(shí)現(xiàn)csv文件導(dǎo)入mysql數(shù)據(jù)庫(kù)的方法,涉及php文件讀取、轉(zhuǎn)換、數(shù)據(jù)庫(kù)的連接、插入等相關(guān)操作技巧,需要的朋友可以參考下
    2017-04-04
  • php站內(nèi)搜索關(guān)鍵詞變亮的實(shí)現(xiàn)方法

    php站內(nèi)搜索關(guān)鍵詞變亮的實(shí)現(xiàn)方法

    這篇文章主要介紹了php站內(nèi)搜索關(guān)鍵詞變亮的實(shí)現(xiàn)方法,以實(shí)例形式較為詳細(xì)的分析了數(shù)據(jù)庫(kù)表的創(chuàng)建及針對(duì)數(shù)據(jù)庫(kù)的搜索關(guān)鍵字高亮的實(shí)現(xiàn)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-12-12
  • 不用mod_rewrite直接用php實(shí)現(xiàn)偽靜態(tài)化頁面代碼

    不用mod_rewrite直接用php實(shí)現(xiàn)偽靜態(tài)化頁面代碼

    不用mod_rewrite直接用php代碼實(shí)現(xiàn)偽靜態(tài)效果,大家看后就會(huì)發(fā)現(xiàn)php真的很方便
    2008-10-10
  • PHP內(nèi)存緩存Memcached類實(shí)例

    PHP內(nèi)存緩存Memcached類實(shí)例

    這篇文章主要介紹了PHP內(nèi)存緩存Memcached類,以實(shí)例形式分析了PHP內(nèi)存緩存Memcached的實(shí)現(xiàn)方法,是php操作memcached的典型應(yīng)用,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-12-12
  • PHP Token(令牌)設(shè)計(jì)

    PHP Token(令牌)設(shè)計(jì)

    PHP Token(令牌)設(shè)計(jì) 設(shè)計(jì)目標(biāo): 避免重復(fù)提交數(shù)據(jù). 檢查來路,是否是外部提交 匹配要執(zhí)行的動(dòng)作(如果有多個(gè)邏輯在同一個(gè)頁面實(shí)現(xiàn),比如新增,刪除,修改放到一個(gè)PHP文件里操作) 這里所說的token是在頁面顯示的時(shí)候,寫到FORM的一個(gè)隱藏表單項(xiàng)(type=hidden). token不可明文,如果是明文,那就太危險(xiǎn)了,所以要采用一定的加密方式.密文要可逆.俺算法很白癡,所以采用了網(wǎng)上一個(gè)現(xiàn)成的方法.
    2008-03-03
  • php adodb連接帶密碼access數(shù)據(jù)庫(kù)實(shí)例,測(cè)試成功

    php adodb連接帶密碼access數(shù)據(jù)庫(kù)實(shí)例,測(cè)試成功

    最近前臺(tái)有個(gè)開票系統(tǒng)需要改進(jìn)導(dǎo)致需要用PHP去連接那個(gè)系統(tǒng)的 數(shù)據(jù)庫(kù),ACCESS的帶密碼的。寫了個(gè)簡(jiǎn)單的實(shí)例,記錄下。
    2008-05-05
  • php ajax異步讀取rss文檔數(shù)據(jù)

    php ajax異步讀取rss文檔數(shù)據(jù)

    這篇文章主要介紹了php ajax異步讀取rss文檔數(shù)據(jù)的相關(guān)資料,RSS是一種描述和同步網(wǎng)站內(nèi)容的格式,需要的朋友可以參考下
    2016-03-03
  • php 的多進(jìn)程操作實(shí)踐案例分析

    php 的多進(jìn)程操作實(shí)踐案例分析

    這篇文章主要介紹了php 的多進(jìn)程操作,結(jié)合具體實(shí)例形式總結(jié)分析了php多進(jìn)程的常見操作技巧與相關(guān)使用注意事項(xiàng),需要的朋友可以參考下
    2020-02-02
  • 用php隨機(jī)生成福彩雙色球號(hào)碼的2種方法

    用php隨機(jī)生成福彩雙色球號(hào)碼的2種方法

    這里為大家介紹用php隨機(jī)生成福彩雙色球號(hào)碼的二種方法,供朋友們學(xué)習(xí)參考。新的一年,祝大家中大獎(jiǎng),發(fā)大財(cái)
    2013-02-02

最新評(píng)論

双峰县| 德惠市| 榕江县| 红原县| 化隆| 南漳县| 鱼台县| 桑日县| 大埔区| 蒙自县| 永寿县| 芦山县| 安乡县| 铜山县| 敦煌市| 昌平区| 资中县| 镇江市| 三台县| 调兵山市| 灯塔市| 兰溪市| 墨竹工卡县| 泽普县| 舞钢市| 大厂| 彰化县| 甘肃省| 五常市| 武强县| 金湖县| 博兴县| 白沙| 丹东市| 安庆市| 永州市| 鄂伦春自治旗| 平度市| 鹤岗市| 克什克腾旗| 古丈县|