由於最近要將原有Cacti遷移至集成好的CactiEZ上,中間遇到了許多問題,其中mysql的原有數據庫中的中文亂碼了,原有數據庫為UTF-8,而CactEZ上是latin,上網查詢找到了以下辦法
首先
必須將 MySQL 的預設編碼改成 UTF-8
透過修改 MySQL的設定檔
vim /etc/mysql/my.cnf
在 [mysqld] 內
加上
default-character-set=utf8
default-collation=utf8_general_ci
接著重新啟動 MySQL
service mysqld restart
完成 MySQL 的設定
接下來
將 Cacti 產生的 html 網頁
加上 UTF-8 的設定
我先修改 include/top_header.php
找到 <title> 的地方(可利用 vi 的功能 "/" 去找!)
在 <title> 之前加上
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
接著修改 lib/graph_export.php
一樣找到 <title> 的地方
在 <title> 之前加上
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">
這裡要注意一下
graph_export.php 這個檔案中
有兩個地方有 <title>
記得都有加上去喔
再來
修改 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 轉換,所以中文就不會被改成亂碼了。
转载于:https://blog.51cto.com/zhangrui90/569620