上一篇在了解 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 繁體中文化吧,敬請期待。