日本語ファイル名のアップロード後文字化け

日本語ファイル名のアップロード後文字化け

- Kenichi NOMURA の投稿
返信数: 20
日本語ファイル名がアップロードした時に文字化けします。
そのあとのリネームの操作もできない状況です。
バージョンは下記ですが、バージョンアップすれば直るのでしょうか、
ソースを見直さないといけないのでしょうか。

サーバ
 windows2003R2
WEBサーバ
 IIS6.0
moodle
 バージョン 1.9.2
database
 mysql バージョン 4.1.22
php
 バージョン 5.2.9
添付 moodle-mojibake.gif
Kenichi NOMURA への返信

Re: 日本語ファイル名のアップロード後文字化け

- Tatsuya Shirai の投稿

 これは日本語Windows(Server含む)の仕様上の制限によるものです.

 現状における対策は,(1)日本語を含むファイル名を一切使わない,(2)当方で公開しているfs_moodleを使う,の選択肢しかありません.(Moodle2.0で状況は少し好転します)

 fs_moodleはオリジナルのMoodleを改良して日本語Windows上で日本語ファイル名とフォルダ名を使用可能としたパッケージです.本家に2~3週ほど遅れてバージョンアップしています.

 当初は日本語Windowsへの対応だけを行っていたのですが,さまざまな改良や機能の拡張を繰り返してかなり独自性が強くなってきてしまいました.(便利になっているのですが)

 fs_moodleの説明と配布はこちらのMoodleサイトで公開しています.ゲストでもログインできますのでご検討下さい.

Tatsuya Shirai への返信

Re: 日本語ファイル名のアップロード後文字化け

- Kenichi NOMURA の投稿
ご連絡遅くなり申し訳ございません。
協議の上、fs_moodleを採用する事にいたしました。
構築中アドバイスをお願いすることもあると思いますがその際はご指導よろしくお願いいたします。

Kenichi NOMURA への返信

Re: 日本語ファイル名のアップロード後文字化け

- Tatsuya Shirai の投稿

はい,了解しました.

設定ファイルできめ細かく追加した機能の有効無効や初期値を決められる反面,「一体,こいつは何だ?」という設定も沢山あると思います.131項目もの修正のうち,余計なお世話な部分もあるのですが,必須とオプションの切り分けが私の中でもはっきりとできていませんでした.構想としては必須の修正のみを行ったpureなパッケージとフル機能のパッケージの二つを公開したいと思っているのですが...

少なくともMoodle1.8とMoodle1.9はサポートを続けますし,Moodle2.0も調査を続けています(Moodle2.0自体が全く未完成なのでこちらも作業を進められない).私に何か重大なことが起こらない限りはサポートを続けますのでご安心下さい.

Tatsuya Shirai への返信

Re: 日本語ファイル名のアップロード後文字化け

- Yuko Sato の投稿

本件に関連しまして、追加で質問させてください。

上記の環境で、日本語ファイル名の問題だけでなく、ファイルの相対パスの問題も起きております。

具体的には、既にhtmlで作ったコンテンツを「ファイル」の中に置いておき、リソースとして追加する場合、相対パスで書かれたリンクが機能しません。(IISで設定したHTMLドキュメントホームディレクトリのルートを見に行きます。)

fs_moodleの利用により、この問題も解決することが期待できますでしょうか。もしくは、また別の問題なのでしょうか。

Yuko Sato への返信

Re: 日本語ファイル名のアップロード後文字化け

- Tatsuya Shirai の投稿

あまりHTMLファイルをファイルの領域にアップロードしたことが無かったので試してみました.

[リソースの追加]で[ファイルまたはウェブサイトにリンクする]で開くリソースの設定画面で,[ファイルを選択またはアップロードする]を選択すると,ファイル以下のフォルダ構造が表示されます.先にアップロードしたindex.htmlファイルを選択して,名称を入力し,[保存してコースに戻る]でコース上にindex.htmlへの”ファイルのリソースへのリンク”が作成されます.これをクリックするとindex.htmlページが表示されました.

 当方はOSがWindowsServerではなくWindowsXPですのでIISとは挙動が違うかも知れません.

 あ,表示されたindex.htmページ内の相対リンクの話ですね.どうだろう.

 アップロードしたndex.htmlのファイルを見てみると,

<A href="GroupWatcher/index.html">スケジュール管理 (GroupWatcher)</A>

このような相対パスなのに,表示されたWebページ(index.html)のリンク先は,

http://www.suzuka-ct.ac.jp/mech/moodle/file.php/42/GroupWatcher/index.html

と表示されます.凄い! きちんとfile.phpを介して静的なページを表示するようにアドレスを変換していますね.この部分は私は手を入れた記憶は(多分)ありません.

 同じように,HTMLファイルの中で相対パスで表されているリンク先が,リソースとしてMoodleによって表示された後に,リンクがどのように変わっているか教えて頂けませんか? IISならではの特殊事情があるかも知れません.

#なお,私がアップロードしたindex.htmlページはシフトJISで記述されていました.fs_moodleのお節介機能により,このindex.htmlファイルをMoodle上で編集([ファイル]で”編集”を選ぶ)すると,自動的にコードをシフトJISからUTF-8に変換してくれます.そうすると,charset=と不一致が起こるので,そのまま保存するとおかしくなるかも知れません.その場合はcharaset=をUTF-8に変えるのが無難ですね.(すみません,この部分は蛇足です)

Tatsuya Shirai への返信

Re: 日本語ファイル名のアップロード後文字化け

- Yuko Sato の投稿

例えば、
「ファイル」の中に
index.html
folder/test.html
を入れておき、[リソースの追加]でindex.htmlのアップロードをすると、
以下のようなアドレスになります。(コースのIDが5の場合)
http://localhost/moodle/file.php?file=%2F5%2Findex.html

そこから、相対パスで記述されたリンク先(folder/test.html)へいこうとすると、
http://localhost/moodle/folder/test.html

を指しており、file.php?file=%2F5%2Fの部分が抜けてしまいます。

> #なお,私がアップロードしたindex.htmlページはシフトJISで記述されていました.fs_moodleのお節介機能により,このindex.htmlファイルをMoodle上で編集([ファイル]で”編集”を選ぶ)すると,自動的にコードをシフトJISからUTF-8に変換してくれます.そうすると,charset=と不一致が起こるので,そのまま保存するとおかしくなるかも知れません.その場合はcharaset=をUTF-8に変えるのが無難ですね.(すみません,この部分は蛇足です)

オリジナルのMoodleでは、そもそもcharaset=shift_JISで書くと編集できないので、
ユーザの先生には取り敢えず全部UTF-8に変更してアップロードしてもらったため、その点は大丈夫そうです。
#ただ、既存のHTMLファイルを全部書き換えることに関してはかなり、渋々という様子でしたが。

Yuko Sato への返信

Re: 日本語ファイル名のアップロード後文字化け

- Tatsuya Shirai の投稿

> http://localhost/moodle/file.php?file=%2F5%2Findex.html

このアドレス表示は正しいと思うのですが,気になるのは(1)file=形式と,(2) %2F5%2FのURLエンコードされている点ですね.どちらかが自動的なURL変換を阻害している可能性があります.(2)が怪しいと思うのですが,まずは(1)を試してみましょう.

[サイト管理]-[サーバ]-[HTTP]の管理画面中の”スラッシュを使用する”がNoに設定されていますよね?(デフォルトはYes) 何らかの理由があってNoに設定したのであろうと思いますが,一時的にNoに設定して試して頂けないでしょうか? もしそれで(%2F5%2Fであっても)相対パスがfile.phpを介する形式に置き換わるようであれば,バグの可能性があります.

Tatsuya Shirai への返信

Re: 日本語ファイル名のアップロード後文字化け

- Yuko Sato の投稿

”スラッシュを使用する”をYesにしたところ、以下のようになり、

http://localhost/moodle/file.php/5/index.html

「エラー: このリンクは無効です。」となってしまいます。

Yuko Sato への返信

Re: 日本語ファイル名のアップロード後文字化け

- Tatsuya Shirai の投稿

なるほど.Apacheですとどちらの形式でもファイルアクセス可能ですが,IISの場合は制限があるのですね.

 ちなみに当方はApacheを使用しているのですが,”スラッシュを使用する”をNoにしたところ,似たような状況(htdocsを基準とした相対パス)になりました.ちょっとバグっぽいですね.

 fs_moodleを利用する前(まだfs_moodleを導入していませんよね?)で発生するならば,これはMoodleの問題となりそうです.ちょっとだけ調査したのですが,まだ肝心のURLを書き換えるコードが発見できていません.どこだろう...mod/resource/type/fileの下だと思うのですが...それともfile.phpかな?

Tatsuya Shirai への返信

Re: 日本語ファイル名のアップロード後文字化け

- Tatsuya Shirai の投稿

大きな勘違いをしていました.

表示されたHTMLページのソースを表示させてみたところ,相対アドレスで記述されている<a>タグのアドレスは何も手を加えられていませんでした.オリジナルのままです.この事実と”スラシュを使用する”をNoに設定すると正常に動作しなくなる,この2点から考えると,”スラッシュを使用する”をYesに指定していると結果的に相対パスがうまく機能していた,という結論になりました.スラッシュを使用する場合,URLはたとえば,

http://www.suzuka-ct.ac.jp/mech/moodle/file.php/42/index.html

です.カレントパス(という表現が正しいのか分かりません)は,

http://www.suzuka-ct.ac.jp/mech/moodle/file.php/42/

ですので,そこから示される相対アドレスGroupWatcher/index.htmlは,

http://www.suzuka-ct.ac.jp/mech/moodle/file.php/42/GroupWatcher/index.html

と装飾されるのでOK.ところが,"スラッシュを使用する"をNoとした場合は,

http://www.suzuka-ct.ac.jp/mech/moodle/file.php?file=/42/index.html

のアドレス指定でリソースのHTMLファイルを開きますので,カレントパスは,

http://www.suzuka-ct.ac.jp/mech/moodle/

となります.ここから相対アドレスGroupWatcher/index.htmlを指定すると,

http://www.suzuka-ct.ac.jp/mech/moodle/GroupWatcher/index.html

このようなアドレスになってしまい,ファイルが存在しないとなるのは当然のことです.


仕組みは分かりました.(仕組み:特にない)

解決策は,

  1. IIS環境でも”スラッシュを使用する”をYesにできるようにする
  2. アドレスをすべて絶対アドレス指定する
  3. (どうすれば良いのか分かりませんが)カレントパスをコースのファイルの位置に移動する

ですね.

 そういえばKagoさんの所もIISを使用していましたよね? ”スラッシュを使用する”をYesにできます?

#当方も近日中にIIS(WindowsServer2008)をデバッグ用に立ち上げる予定ですが,まだまだ時間が掛かりそうです.

Tatsuya Shirai への返信

Re: 日本語ファイル名のアップロード後文字化け

- Tatsuya Shirai の投稿

ご承知のこととは思いますが,念のために補足します.

2のアドレスをすべて絶対アドレス指定するですが,moodledata以下のフォルダをIISでアクセス可能にするのは危険(moddataやbackupdataなどの情報が外部に漏れる恐れがある)です.どこか全く別のフォルダをIIS経由で公開可能として,そちらに先生方のHTMLファイル群を移動し,その絶対パスをリソースとして指定するという意味です.各HTMLファイル内のリンクのアドレスは現状どおりの相対パスで大丈夫ですよね.

 このHTMLファイルを全く別の場所に公開する方法ですと,その公開フォルダにファイルをアップロード(FTPなど)する権限を誰に与えるのか,といった管理上の問題がありますが,一番,確実な方法でしょう.Moodleを介さずにアクセスできては困るという条件があるならば,なんらかの仕組みを考える必要はありますが.

 3のカレントパスをコースのファイルの位置に移動するですが,ちょっと調べた範囲では難しそうです.moodledata以下のファイルへアクセスするには必ずfile.phpを介さなくてはならないので,全ての<a>タグへのアクセス時にhttp://www.suzuka-ct.ac.jp/mech/moodle/file.php?file=/42/を頭に付ける必要があります.Javascriptで実現できるかも知れないと思ったのですが,副作用が多そうです.たとえばindex.htmlから呼ばれたその先のHTMLファイルにもその効果を継承できたとして,では今度,普通の*.phpにアクセスする際には解除して...などなど.

Tatsuya Shirai への返信

IISでスラッシュの使用に関して

- Tatsuya Shirai の投稿

私もこの議論の詳細をあまり覚えていないのですが,無関係ではないかも知れません.
ご一読下さい.

http://moodle.org/mod/forum/discuss.php?d=94176

こちらは日本語ファイル名が問題になっていました.なんとかIISで”スラッシュの使用”をYesに設定できると良いですね.

私も時間ができましたらもう一度,目を通しておきます.

Tatsuya Shirai への返信

IISでスラッシュの使用をYesにするには

- Tatsuya Shirai の投稿
先の書き込みを再び読み直してみたら、ズバリ、Kagoさんが2004年に書き込まれた「IISでの利用に深刻な問題」でこれとほぼ同じ問題に結論を出していました。「スラッシュを使用する"をYesにするとIISがエラーを出すのは、”IISの.phpのアプリケーションマッピングに「ファイルの存在を確認する」というチェックボックスがあるのですが、これをオフにしないと、file.php/pic.jpg の設定にした場合、ファイルが存在しないというページ(つまり404)が返される。」ですね。これは94176の投稿で私も同じ問題に遭遇し、Kagoさんに教えて頂いていました^^;
”スラッシュを使用する”状態でブラウザからサーバに渡されるURLはファイルの実体にパラメータを付与した文字列ですので、そのようなページは実際には存在しません(その代わり、これをURLと勘違いさせて動的なページの出力結果をProxyサーバに静的なページと同様にキャッシュさせようという仕組みですね)。ですので、実際にファイルの存在を確認されては困る。

”ファイルの存在を確認する”のチェックボックスを外すことでIISで”スラッシュを使用する”をYesに設定することができれば、あとはIISでもコースフォルダ内のHTMLファイルに相対アドレス(file.php/...)でアクセスできるようになると思います。お試し下さい。

fs_moodleでは日本版IIS固有の致命的な問題を一つ解決済みです。是非ともご活用下さい。

Tatsuya Shirai への返信

Re: IISでスラッシュの使用をYesにするには

- Yuko Sato の投稿

いろいろとどうもありがとうございます。

http://moodle.org/mod/forum/discuss.php?d=9757
http://moodle.org/mod/forum/discuss.php?d=13910

実は上記のトピックは既に拝見しまして、IISの.phpのアプリケーションマッピングの「ファイルの存在を確認する」のオン・オフは試しておりました。
しかし、これのオン・オフを変えても「スラッシュを使用する」のYes/Noの挙動は変化しません。

この相対参照の不具合が直るかどうかは不明であったとしても、日本語ファイルの取り扱いの対処はしたいので、fs_moodleの導入はする方向で進めたいと思っております。

Yuko Sato への返信

Re: IISでスラッシュの使用をYesにするには

- Tatsuya Shirai の投稿

そうですか.私の中では「解決!」と思っていたのですが,甘かったようですね.

解決策は”スラッシュの使用”をYesにするしかいまのところ考えられません.
次はこれをYesにできない理由探しに絞った方が良さそうです.

Tatsuya Shirai への返信

Re: IISでスラッシュの使用をYesにするには

- Yuko Sato の投稿

IIS上でslashargumentsをオンにしておくと、アップロードしたファイルがNot Foundになる件は、FAQにも載っており、slashargumentsを変更する(オンからオフに変える)と、相対リンクが使用できないとの記述がありました。

http://docs.moodle.org/ja/インストールFAQ
「アップロードしたファイルへのアクセスまたは閲覧するときに、いつも「File not Found」というメッセージが表示されます」

http://docs.moodle.org/en/Installation_FAQ
Uploaded files give "File not found"

#英語の方がより詳細に書いてあります。

ちなみに、health.phpを見ると、添付のような画面が表示されましたが、実際は、

cgi.fix_pathinfo=1
AllowPathInfoForScriptMappingsはDisable、
PHPは5.2.9
になっており、提示された解決方法では解決されませんでした。

結果的には、doc_rootをコメントアウトしたら、slasharguments=yesで正常に動作するように(相対リンクもOK)なりましたので、ご報告します。

添付 slasharguments.JPG
Yuko Sato への返信

Re: IISでスラッシュの使用をYesにするには

- Tatsuya Shirai の投稿

おめでとうございます.

> 結果的には、doc_rootをコメントアウトしたら、slasharguments=yesで正常に動作するように(相対リンクもOK)なりましたので、ご報告します。

ところでこの doc_rootとはどこにある何の設定でしょう?

Tatsuya Shirai への返信

Re: IISでスラッシュの使用をYesにするには

- Yuko Sato の投稿

説明不足、失礼しました。

これは、php.iniの中のPaths and Directories あたりにある設定です。doc_rootは「IIS以外のWebサーバのもとでCGIとしてPHPを実行する際に指定するべきもの」で、デフォルトはNULLなのに、うっかりApacheベースで書かれた設定例などを参考に書き換えてしまったのが悪かったようです。

ちゃんとコメント文の内容を理解しないで設定するとこういうことになってしまうのですね。

今回は、英語のサイトで、IISユーザが「SCORMのパッケージでエラーが発生する」と、当方と同じような症状が出ていて、参考にしました。

http://moodle.org/mod/forum/discuss.php?d=109026

調べてみると、結構同じミスをしている人がたくさんいるようでした驚き

評点平均: お役立ち度: ★★★★★★★ (2)
Tatsuya Shirai への返信

Re: 日本語ファイル名のアップロード後文字化け

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators
白井先生

少々古いPetr Škoda (skodak) さんの投稿ですが、ご参考まで。笑顔

[Re: How to get Slashargs = file.php/pic.jpg to work with PHP/IIS]
http://moodle.org/mod/forum/discuss.php?d=9757&parent=102032
Mitsuhiro Yoshida への返信

Re: 日本語ファイル名のアップロード後文字化け

- Tatsuya Shirai の投稿

ありがとうございます.

少し古いですが,参考にして解析を行ってみましょう.

対象としている現象がuserの写真やquizに関わる箇所のように見えますので,もしかしてIISでスラッシュを使用するがNoだと,それらにも影響が現れる,ということでしょうか.そこまで範囲を広げて考えたほうが良さそうですね.