iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0
IT管理

OCS Inventory:開源資產管理解決方案系列 第 5

解決 OCS Inventory 下載 CSV 檔案中文亂碼的問題

  • 分享至 

  • xImage
  •  

上一篇在了解 OCS Inventory 的例行性工作排程之後,有時候我們會需要把統計的資料匯出給稽核人員或者主管進行審查,OCS Inventory 在許多介面都有提供 Download 的連結方便我們進行下載,今天我們來解決下載 CSV 檔案中文亂碼的問題。

常用的功能包括列出所有的軟體

我們嘗試將 All software 的結果匯出成 CSV 檔案

可以發現中文的部分都變成亂碼了

主要是 csv 匯出程式的問題

cd /usr/share/ocsinventory-reports/ocsreports/plugins/main_sections/ms_export
sudo vi ms_csv.php

找到 Generate output page 程式碼區段

// Generate output page
if ($toBeWritten != "" || (isset($Directory) && file_exists($Directory . $protectedGet['log'])) ) {

    // Work around iexplorer problem
    if (ini_get("zlib.output-compression")) {
        ini_set("zlib.output-compression", "Off");
    }

    // Static headers
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-control: private", false);
    header("Content-type: application/force-download");
    header("Content-Transfer-Encoding: binary");

    if ($toBeWritten != "") {
        // Generate output page for DB data export
        header("Content-Disposition: attachment; filename=\"export.csv\"");
        header("Content-Length: " . strlen($toBeWritten));
        echo $toBeWritten;
    } else {
            // Generate output page for log export
        $filename = $Directory . $protectedGet['log'];
        header("Content-Disposition: attachment; filename=\"" . $protectedGet['log'] . "\"");
        header("Content-Length: " . filesize($filename));
        readfile($filename);
    }

} else {

    // Nothing to export
    require_once (HEADER_HTML);
    msg_error($l->g(920));
    require_once(FOOTER_HTML);

}

在 185 行的地方插入下段程式碼

$toBeWritten = mb_convert_encoding($toBeWritten , "Big5" , "UTF-8");

也就是這樣

    if ($toBeWritten != "") {
        // Generate output page for DB data export
        $toBeWritten = mb_convert_encoding($toBeWritten , "Big5" , "UTF-8");
        header("Content-Disposition: attachment; filename=\"export.csv\"");
        header("Content-Length: " . strlen($toBeWritten));
        echo $toBeWritten;
    } else {
            // Generate output page for log export
        $filename = $Directory . $protectedGet['log'];
        header("Content-Disposition: attachment; filename=\"" . $protectedGet['log'] . "\"");
        header("Content-Length: " . filesize($filename));
        readfile($filename);
    }

不需要重啟伺服器,重新下載一次即可正常顯示中文了。

既然提到中文亂碼的部分,下一篇就來教大家如何將 OCS Inventory 繁體中文化吧,敬請期待。


上一篇
了解 OCS Inventory 的例行性工作排程 Crontab
下一篇
如何將 OCS Inventory 繁體中文化
系列文
OCS Inventory:開源資產管理解決方案30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
yam911305
iT邦新手 4 級 ‧ 2023-09-07 14:27:53

讚!!! 剛好在架設
/images/emoticon/emoticon32.gif

我要留言

立即登入留言