ブログの下にMRTGのHTMLファイルを置くと
HTMLに
<meta http-equiv=”content-type” content=”text/html; charset=euc-jp” >
と書いてあってもutf8と見なされるらしい。
cp /var/www/mrtg/cpu.html > /var/www/mrtg/temp
nkf -Ew /var/www/mrtg/temp > /var/www/mrtg/cpu.html
でutf8にすると文字化けは直る。
しかし、
<meta http-equiv=”content-type” content=”text/html; charset=euc-jp” >
のままなのは変なので
#CPU
cp /var/www/mrtg/cpu.html /var/www/mrtg/temp
ed /var/www/mrtg/temp >& /dev/null << EOF
1,\$s/euc-jp/utf8/g
wq
EOF
nkf -Ew /var/www/mrtg/temp > /var/www/mrtg/cpu.html
と強引に変えておくといいのかもしれない。
ただ
<!– Begin Head –>
<head>
<title>CPU使用率</title>
<meta http-equiv=”refresh” content=”300″ />
<meta http-equiv=”pragma” content=”no-cache” />
<meta http-equiv=”cache-control” content=”no-cache” />
<meta http-equiv=”expires” content=”Wed, 25 Jan 2012 21:20:07 GMT” />
<meta http-equiv=”generator” content=”MRTG 2.16.2″ />
<meta http-equiv=”date” content=”Wed, 25 Jan 2012 21:20:07 GMT” />
<meta http-equiv=”content-type” content=”text/html; charset=utf8″ /> ←タイトルの後に書いてどうする?
とHTMLがあからさまに間違っているのを
<!– Begin Head –>
<head>
<meta http-equiv=”content-type” content=”text/html; charset=utf8″ /> ← ここが正解
<title>CPU使用率</title>
<meta http-equiv=”refresh” content=”300″ />
<meta http-equiv=”pragma” content=”no-cache” />
<meta http-equiv=”cache-control” content=”no-cache” />
<meta http-equiv=”expires” content=”Wed, 25 Jan 2012 21:20:07 GMT” />
<meta http-equiv=”generator” content=”MRTG 2.16.2″ />
<meta http-equiv=”date” content=”Wed, 25 Jan 2012 21:20:07 GMT” />
と直すには
/usr/bin/mrtgの1388行あたりで
print HTML “<!– Begin Head –>\n”;
print HTML <<“TEXT”;
<head>
TEXT
print HTML “\t\t” . ‘<meta http-equiv=”content-type” content=”text/html; charset=utf8″ />’ . “\n”;
print HTML <<“TEXT”;
<title>$$rcfg{‘title’}{$router}</title>
<meta http-equiv=”refresh” content=”$refresh” />
<meta http-equiv=”pragma” content=”no-cache” />
<meta http-equiv=”cache-control” content=”no-cache” />
<meta http-equiv=”expires” content=”$expiration” />
<meta http-equiv=”generator” content=”MRTG $VERSION” />
<meta http-equiv=”date” content=”$expiration” />
TEXT
# print HTML “\t\t” . ‘<meta http-equiv=”content-type” content=”text/html; charset=’.&$LOC(‘iso-8859-1’) . “\” />\n”;
にすればいいので
#CPU
cp /var/www/mrtg/cpu.html /var/www/mrtg/temp
ed /var/www/mrtg/temp >& /dev/null << EOF
1,\$s/euc-jp/utf8/g
wq
EOF
nkf -Ew /var/www/mrtg/temp > /var/www/mrtg/cpu.html
は
#CPU
cp /var/www/mrtg/cpu.html /var/www/mrtg/temp
nkf -Ew /var/www/mrtg/temp > /var/www/mrtg/cpu.html
と短くなる。
だが良く考えてみると、
Perl自体、既に5.8でutf8対応済みなので、/usr/bin/mrtgのコードが旧体質のままだったのだ。
実は元ネタですべきことは、
上のmrtg(Perlソース)の古式ゆかしく嗚呼懐かしやなiso-8859-1(ラテン系コードページ)ごまかしコードを書き換え、
/etc/mrtg/mrtg.cnfを手直しするだけでよく
nfkでの変換までやるのは既に藪蛇。
ただ、
charset=’.&$LOC(‘iso-8859-1’) . “\” />\n”;
を
content=”text/html; charset=utf8″ />’ . “\n”;
に書き直すのはチョットかっこ悪いし、maxも日本語化されない。
それよりもMRTGの各国語版の翻訳が1ファイルになってて
普通のエディタで修正不能なんだな。
ああ、だからiso-8859-1使ってた訳か。
ええと翻訳直すんならソース一式からやり直してください???
えええ???