ajaxplorer文字化け…日本語ファイル名のダウンロード

全然解決できなかった日本語ファイル名のダウンロードですが
お盆のヒマさで解決できましたw

どこ触っていいのやら皆目検討もつかないので手当たり次第に眺め…
ジックリまじまじなんて眺めませんが
ajaxplorer\server\classes
ココは何も無さそう…

fsと言えばファイルシステム?なんて思いながら眺めていた次のファイル
ajaxplorer\plugins\ajxp.fs\class.fsDriver.php

SystemTextEncoding
って部分で引っかかって検索してみたらヒットしましたw
症状は似たような事で対策しておられます。

http://d.hatena.ne.jp/t_fujii/20090618/1245329119
コチラは文字化けではなく消滅するみたい
何か問題があって検索する時は「文字化け」と限定せずに
「バグ」「修正」などで検索したらいいのかも☆なんて思いましたょ。

若干症状は違うけども、問題は文字コードの様子なので上記Webページの変更をそのまま適用した結果
なんとFirefox3でのダウンロードは正常になりました。
やっぱり精通している人は違うなコリャ~凄い☆って感心しまくり

が、IEでのダウンロードが出来なくなってしまった。
ファイル名の表示までは正常でも、ダウンロードする時にファイル名から拡張子まで化けている状態
立場が逆転したようなモノですが…
IE6とIE8で化け方が違うのは何故?って思うけど、コレは置いといて…

元のbasenameでの取得は
IEで正常、FFで文字化け

explodeで切り分けエンコードしてるって事ですかね
参考にしたモノだと IEで文字化け
FFで正常っと…
ファイル名の取得から文字コード変換。。。
UA見て判断しろって事ですかね

問題の部分がハッキリしただけでも良しとするか…
ココだけどうにかすればいいのであろうとアレコレテスト
$localName = ($localName==”” ? basename($filePathOrData) : $localName);
他の関数もテストしてみましたが、改善せず相変わらすどっちかがおかしくなる。

で、更に進展しました☆
「PHP 日本語 ファイル名 取得」とググってみたら結構ヒットしたんですわ
http://d.hatena.ne.jp/shimibow/20061213/1166023244
まさにUA見てから処理してますやん!

以下に変更するとIEのみ文字化け
$localName = pathinfo($filePathOrData, PATHINFO_BASENAME);
$localName = SystemTextEncoding::toUTF8($localName);

なので以下を挿入してみた

$ua = $_SERVER[‘HTTP_USER_AGENT’];
if (strstr($ua, ‘MSIE’) && !strstr($ua, ‘Opera’)) {
$localName = mb_convert_encoding($localName, “EUC-JP”, “UTF-8”);
} elseif (strstr($ua, “Safari”)) {
$localName = “”;
}

上記サイト参考でやっと正常になったみたいですょ
Safariのくだりはワカリマセン~
というか、IE6と8とFF以外は確認してませんし、全然素人なので^^;ツッコミは無しで☆
まだあとで細かいところ確認したいと思ってます。
自分の環境では改善しましたがOSやディストリ、PHPのバージョンでも違うと思いますょ~
Vine 4.2
PHP 5.2.9
ajaxplorer 2.4
参考になれば幸せ~

以下は改善しなかったけど参考になりますた~
PHPのpathinfo、basename関数で日本語ファイル名がうまく取得できない。
http://blog.jojo.jp/?eid=632412

2010/08/05追記
続編
[ad#co-2]

16 8月, 2009