「Knowledgeroot」カテゴリーアーカイブ

Knowledgeroot:添付文書が文字化け

Linuxというか、オープンソースを扱っていると避けて通ることはできない文字化けとの戦い。ま〜ったく、日本人って損だよね。てゆうか、早くUTF-8に統一しないもんかねぇ。

と、愚痴の元となっているのが添付文書のファイル名の文字化け。Knowledgerootの画面上では正しく見えているんだけど、いざダウンロードしようと思うと日本語ファイル名は文字化けしちゃって、すごいことになっちゃう。

どうやらShift-JISをUTF-8で表示させようとしているみたい。これは、一番手っ取り早いのがファイル名をShift-JISにしてしまい、画面上はShift-JIS→UTF-8変換してしまうことだと思う。

class-knowledgeroot-header.phpの498行目あたりで$this->CLASS['db']->query("INSERT INTO files(belongs_to,file,filename,filesize,filetype,owner) VALUES ('".$_POST['contentid']."','".addslashes(serialize($buffer))."','" . mb_convert_encoding($_FILES['datei']['name'],"Shift-JIS","auto") . "','" . $_FILES['datei']['size'] . "','" . $_FILES['datei']['type'] . "','".$_SESSION['userid']."')");とやって、ファイル名をShift-JISに変換してDBに保存する。

今度は、class-knowledgeroot-content.phpでは304行目あたりで<img src=\"images/file.gif\" class=\"upload\"> ".mb_convert_encoding($row['filename'],"UTF-8","Shift-JIS")."</a></code>として、616行目や618行目で<a href=\"index.php?download=".$zeile['id']."\" title=\"".$title."\"><img src=\"images/file.gif\" class=\"upload\"/> ".mb_convert_encoding($zeile['filename'],"UTF-8","Shift-JIS").">/a<として画面上のファイル名をShift-JIS→UTF-8に変換する。

これで問題無く画面上もダウンロードファイルのファイル名は文字化けしなくなったけど、ダウンロードとともにファイルを開くと「ファイルが見つかりません」みたいな感じで怒られてしまう。今度はこの問題解決に取り組もう。

Knowledgerootを試す

なにかいいナレッジマネジメントソフトウェアはないものか・・・ と嘆いていても始まらないので、Knowledgerootを試してみることにした。

とりあえず、現時点で最新のknowledgeroot-0.9.7.1.tar.gzを落としてきてweb公開ディレクトリに展開する。# tar xvf knowledgeroot-0.9.7.1.tar.gz
# cp knowledgeroot-0.9.7.1/* /var/www/html/knowledgeroot
ついでに、日本語ファイル lang_ja.php をダウンロードして、system/language/ 以下に保存する。

DBを作成する。やはり最近はMySQLのほうがメジャーになりつつあるので、MySQLにknowledgerootデータベースを作る。これまたお手軽なphpMyAdminで、文字コードはutf8_general_ciにしておく。次にMySQLでknowledgerootユーザを作って、knowledgeroot DBの全ての権限をあたえる。

次にmysqlにログインして、展開したファイルの中のdumps/mysql.sqlを実行する。# cd /var/www/html/knowledgeroot/dumps
# mysql -u knowledgeroot -p knowledgeroot < myssql.sql Enter password: (パスワード入力)

config/config.inc.php.distをコピーして、config.inc.phpとリネームして内容をカスタマイズする。主な部分は以下のとおり。$CONFIG['db']['user'] ="knowledgeroot";
$CONFIG['db']['pass'] = "(パスワード)";

$CONFIG['db']['encoding'] = "unicode";

// set language for knowledgeroot
// available are: en, de, pt-br
$CONFIG['knowledgeroot']['language'] = "ja";

// used for languagedropdown at options
$CONFIG['knowledgeroot']['availablelanguages'] = array("ja","en","de","pt-br","fr");

これでとりあえずログインできるようになっているはずで、admin / admin でログインしてユーザを追加する。

ちなみに、MySQLのmax_allowed_packetを拡張しておかないと添付ファイルの容量が740KB程度に制限されてしまう。# mysql -u knowledgeroot -p knowledgeroot
mysql> set global max_allowed_packet = 104857600;

これでOK。