玩龙天子 发表于 2019-1-12 06:04:45

Cacti 中顯示中文

Cacti 中顯示中文  由於最近要將原有Cacti遷移至集成好的CactiEZ上,中間遇到了許多問題,其中mysql的原有數據庫中的中文亂碼了,原有數據庫為UTF-8,而CactEZ上是latin,上網查詢找到了以下辦法
  首先   
必須將 MySQL 的預設編碼改成 UTF-8   
透過修改 MySQL的設定檔
  vim /etc/mysql/my.cnf
  在 內   
加上
  default-character-set=utf8   
default-collation=utf8_general_ci
  接著重新啟動 MySQL
  service mysqld restart
  完成 MySQL 的設定
  接下來   
將 Cacti 產生的 html 網頁   
加上 UTF-8 的設定   
我先修改 include/top_header.php   
找到的地方(可利用 vi 的功能 "/" 去找!)   
在之前加上
  
  接著修改 lib/graph_export.php   
一樣找到的地方   
在之前加上
  
  這裡要注意一下   
graph_export.php 這個檔案中   
有兩個地方有   
記得都有加上去喔   
再來   
修改 lib/database.php   
在連上資料庫後加上
  $cnn_id->Execute("set names 'utf8'");
  我是將原本的
  if ($cnn_id->PConnect($hostport,$user,$pass,$db_name)) {   
return(1);      
}
  改成
  if ($cnn_id->PConnect($hostport,$user,$pass,$db_name)) {   
$cnn_id->Execute("set names 'utf8'");      
return(1);      
}
  之前我只做到這裡   
大部份的中文化都已經完成   
但是   
Data Source 這一頁還是有亂碼產生   
今天   
終於被我發現是哪裡出了問題
  在 data_sources.php 這個檔案中   
有用到 htmlentities() 函式(註:1)   
就是這個函式造成中文顯示成亂碼   
我將這個函式改成 htmlspecialchars()(註:2)   
修改 data_sources.php 這個檔案   
找到兩個
  htmlentities($data_source["name_cache"])
  將它們都改成
  htmlspecialchars($data_source["name_cache"])
  Done
  注:
   
[*]htmlentities():這是一個 PHP 的函式,將所有 String 的字元都轉成 HTML 的特殊字集字串,所以才造成中文顯示成亂碼。   
[*]htmlspecialchars():這也是一個 PHP 的函式,跟 htmlentities() 不同的地方在於,這個函式只轉換一些特殊字元,而不全部轉換成 HTML 所定的 ASCII 轉換,所以中文就不會被改成亂碼了。



页: [1]
查看完整版本: Cacti 中顯示中文