ajaxplorerの日本語化にはまった!
ajaxplorerをしばらく放置していたら、バージョンが上がっていたので入れなおしてみました。日本語ファイル名の文字化け対応に本腰を入れたら、結構ハマってしまったので、備忘のためにメモしときます。
(ちなみにバージョンは4.2.3)
setlocale(LC_ALL,'ja_JP.UTF-8');
を入れろって書いてあるけど、この'UTF-8'はサーバーの環境に合わせなければいけなくて、FTPソフトでファイル転送した日本語名ファイルが化けたりする原因にもなる。僕の場合はここは'ja_JP.SJIS'だった。設定を間違えると、ajaxplorerの[設定]の"Diagnostic"のLocaleのところが"C"になってしまうので注意。('ja_JP.ShiftJIS'としたらダメだった)
あとsetlocaleを差し込むファイルは、恐らくbase_conf.phpのほかに、conf/bootstrap_conf.phpとconf/bootstrap_repositories.phpで、conf/bootstrap_repositories.phpが最優先されているような感じ。
これで完了かと思いきや、なぜかファイルをリネームしようとするとファイル名をEUC-JPに変換しようとしていて(data/logs/の中のログをeucで開くとファイル名が化けない)、なんでだろうと思ったら、phpのmbstring_internal_encodingがEUC-JPだった。
ajaxplorerはサーバーからのファイル名をUTF-8に変換しているので、このinternal_encodingをUTF-8に修正。
これでほぼ解決。でもアップロードしたときにたまにファイル名が乱れるのはSJISの5C問題なのかな~。FTPソフトの転送を無視するなら、setlocaleもUTF-8にしてしまうんだけれども。
*'13/2/8追記
SJISの5Cだけでなく5Eも処理されていたので、調べていたら、
core/classes/class.AJXP_Utils.php 内で除去されていると判明
core/classes/class.fsAccessDriver.php 内542行目の以下を訂正
$userfile_name=AJXP_Utils::sanitize(SystemTextEncoding::fromPostedFileName($userfile_name), AJXP_SANITIZE_HTML); //最後の_STRICTを削除
ここで、" , ; / ` < > : * | ? ! ^ \ [ ] の文字を取り除いているようですが, SJISに影響があるので、これを無効にします。
とりあえずこれで様子見です。