We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 33014 ☆ A M B ☆
    • 1,231 Posts
    アップロードファイルの日本語ファイル名については、僕はNucleusではtime( ).jpgなどに
    置き換えるアプローチをファイルマネージャに組み込んでます。サムネイルが表示されるので
    ファイル名はどうでもいいんじゃないかと思えるし、実際、大手のレンタルブログサービスでは
    ファイル名を出さなかったりしますよね。htmlのソースでのぞいてみるとハッシュ値っぽい
    ファイル名になってたりしますが。

    これってシステムイベントOnFileManagerUploadあたりを使って、処理をプラグイン化できないかな?

      • 33014 ☆ A M B ☆
      • 1,231 Posts
      Quote from: tkfm at Nov 06, 2008, 12:04 PM

      関係有りそうなアクションは一通り試したつもりですが、特に文字化けはありませんでした。
      DBの中も一通り覗いてみましたが、正常な日本語で表示されています。
      検証ありがとうございますー。ちょっと安心。今日の夜にでもパッチ一式を提出してみます。
      (本当はまだ不完全なんですが)

      Quote from: tkfm at Nov 06, 2008, 12:04 PM

      そうですね~ 特にMySQLサーバ自体のcollation(MySQL自体の設定ファイル(my.cnfでしたっけ?)に記述しなければならない設定)がデフォルトのままだとlatin1_swedish_ciだったりするんで、そこはユーザーからは触れなかったりしますもんね。ユーザーが声を上げて指摘するしかないですね~ まぁ、MySQLのバージョン自体が未だに4.0系だったりするところも多いですから...
      言ってみるもので、チカッパに関しては僕が報告を入れた数日後に対応いただけました。今後立ち上げる新サーバに関しては適切な設定を施すそうです。だけどそれでもまだ文字化けが発生する箇所が実際あって今回のパッチを作っているので、collation以外にも合わせるべき箇所がまだあるみたいです。実際、MySQLの設定値の一覧を見てみると、デフォルトで「latin1_swedish_ci」になってる箇所が他にもいくつかあります。xreaの場合はきれいにutf8やunicodeで揃ってるのですが。collationだけならphpMyAdminを使ってユーザがデフォルト値を変更できます。

      Quote from: tkfm at Nov 06, 2008, 12:04 PM

      私もそう思います。けど、26文字のアルファベットで事足りる世界の方々にそれがご理解頂けるのかな~?
      強めにしつこく主張していくしかないみたいですね。どうも、英語圏の人相手には強めに主張してちょうどいいくらいのようですが。開発チーム自身も文字化け対応には真剣に取り組んでいて SET CHARACTER の組み込みにも手間をさいているのだろうし、文字化け対応大国の日本ユーザの声にもう少し耳を傾けてもらえるといいなと個人的には思います。
        • 33488
        • 429 Posts
        Quote from: yama at Nov 06, 2008, 08:47 PM

        アップロードファイルの日本語ファイル名については、僕はNucleusではtime( ).jpgなどに
        置き換えるアプローチをファイルマネージャに組み込んでます。サムネイルが表示されるので
        ファイル名はどうでもいいんじゃないかと思えるし、実際、大手のレンタルブログサービスでは
        ファイル名を出さなかったりしますよね。htmlのソースでのぞいてみるとハッシュ値っぽい
        ファイル名になってたりしますが。

        これってシステムイベントOnFileManagerUploadあたりを使って、処理をプラグイン化できないかな?


        おしいっす、このイベント テンポラリーファイルから実際のファイルに移動した後で呼ばれてるんで・・・。
        このイベントの上の方にある
        move_uploaded_file($userfile[’tmp_name’], $_POST[’path’]."/".$userfile[’name’])

        の$userfile[’name’]をやまさん式の日時.xxxに変えちゃえばいいんですけどね
          • 15497
          • 117 Posts
          とても、次のバージョンの検証とかできそうにないのでROMさせてもらってましたが、
          「アップロードファイルの日本語ファイル名」の言葉がささっちゃったいました。 smiley
          ちょっとだけ、ちゃちゃ入れさせてください。
          アップロードファイルの日本語ファイル名については、僕はNucleusではtime( ).jpgなどに
          置き換えるアプローチをファイルマネージャに組み込んでます。サムネイルが表示されるので
          ファイル名はどうでもいいんじゃないかと思えるし、実際、大手のレンタルブログサービスでは
          ファイル名を出さなかったりしますよね。htmlのソースでのぞいてみるとハッシュ値っぽい
          ファイル名になってたりしますが。
          アップロードファイルの日本語ファイル名を日時やハッシュ等に変換する件ですが、
          画像だけなら問題ないんですが、音声ファイルとかでこれをやると悲惨です。
          (実際、うちのお客さんの中には、音声ファイルとかバンバン上げてる方いますし…)
          なんで、うちでは日本語ファイル名はエラーにして、ファイル名を変えてもらってます。
          (リソースブラウザでの話ですが)
            ★日本公式フォーラム2009年9月1日本格始動!★
            http://modxcms-jp.com/bb/

            ▼ウェブ屋のCMS→modxヒキダス流(備忘録)
            http://d.hatena.ne.jp/hikidas_ikeda/
            ▼制作済みHTMLページをmodxで更新するデモ
            http://www.hikidas.com/hikidas/modx_document/modx_demo_osc2009kansai.php
            • 33014 ☆ A M B ☆
            • 1,231 Posts
            ファイルの名前は、できればDBで管理するのが理想のような気がします。本当のファイル名というより、自由につけられるエイリアス名という感じ。運用ケースによっては同じ名前のファイルをいくつも作ることができる仕様。大手レンタルブログのサービスではそんな感じになっているところがいくつかあるみたいですが。最近はMTやWordPressでも画像をDB管理するようになっていて、ページを表示する時はダイレクトにimgタグで引っ張ってそのまま出力するけど、投稿画面で画像をアップロードしたり探したりする時は便利な作りになってますね。
              • 33014 ☆ A M B ☆
              • 1,231 Posts
              Quote from: ZeRo at Nov 06, 2008, 10:23 PM

              おしいっす、このイベント テンポラリーファイルから実際のファイルに移動した後で呼ばれてるんで・・・。
              このイベントの上の方にある
              move_uploaded_file($userfile[’tmp_name’], $_POST[’path’]."/".$userfile[’name’])

              の$userfile[’name’]をやまさん式の日時.xxxに変えちゃえばいいんですけどね
              イベントを追加するのって、簡単にできそうでしょうか。開発チームに提案するのもいいかなと思ったので。
              画素数が大きすぎる画像をアップロード時に500px幅くらいに縮小するような使い方も需要あるでしょうし。
                • 33488
                • 429 Posts
                イベントを追加すること自体は簡単ですね、イベント名がかぶらなければOKです。
                どこの時点でそのイベントを呼び出すかはやりたいことによって呼び出し位置を考えなきゃいけないと思うので、
                ガードをかけたいとかになるとFileUploadのイベントの近くじゃないもっと最初の方になるのかも・・。
                ファイル名のみを置き換えるとかならmove_uploaded_file()を呼び出す直前でもよさそうなんですが、容量チェックして弾くとかになるともっと上の処理でエラーとかにする処理(あるのかわからんけど)より前に呼び出さないといけない とかになります。

                まあ、複数のイベントをファイルアップロード用につけるのもありかも・・。
                イベント呼び出しは簡単だけど、その後処理でアクションを変えれるのか?っていう方が悩ましいかもですね(現状のロジックを極力いじらないという前提ですが)
                  • 27690
                  • 98 Posts
                  にっくです。突然乱入してすみません。

                  ファイルマネージャーの件ですが、やまさんと某所でやり取りしていました。
                  Opengeekに問題認識と対応をお願いするレターを書くつもりなのですが、
                  ファイルマネージャーについてのベストソリューションってどうなるでしょうか huh

                  僕が見た感じ

                  ・ファイルマネージャーでソース表示する際に、当該ファイルのエンコード形式を検地
                  ・エンコード形式が、管理画面に使用されている文字コードと異なる場合、管理画面に合致させる形で一時的に文字コードを変換
                  ・変換済みの文字コードをファイルマネージャーで表示

                  でよいですか?

                  ちょっと話を整理したいので、よろしくお願いします。

                  ※ふと思いましたが、tkfmさんと何がしか情報交換するのは初めてな気がする。
                  モデレーターのにっくです。よろしくお願いします。
                    • 33014 ☆ A M B ☆
                    • 1,231 Posts
                    意外と一発解決とはいかなさそうなので、ここで話をするのがよさそうですね。
                    にっくさんとやりとりしてて、どうもJason(OpenGeek氏)は「他のエンコードで問題は起きないだろうか?」というニュアンスで
                    懸念を抱いているらしいことが分かりました。Jasonはライアンと同じくアメリカの人なので、シングルバイトでは問題を
                    感じないので検証しにくいのが不安なのかもしれません。DBが絡む部分に関してはいろいろ調べてset character set が
                    有効らしいとか、かなり議論を尽くしたうえで今回の0963に盛り込むことになるわけですが、テキストファイルについても
                    多少の検証が必要かもしれません。

                    で、少し考えたのですが、やっぱりtkfmさん提案のコードがいいのではと思えます。8ビット構成つまりシングルバイト系の
                    iso8859系エンコードでもいろいろあって、化ける時は化けるんですね。だから対応は必要。(だと思う、たぶん。)

                    対応コードを盛り込んだうえでRC3としてもう一度出して、各国に条件を具体的に示してテストしていただくのが
                    いいのではと思います。
                    というか、RC2で化けてないかどうかを先に確認していただく必要があるかな?

                    そもそもphpの処理的に、ファイルを読み込んだままを出力してるのなら、ブラウザのエンコード検出もちゃんとできてるのに
                    なぜ化けるのかなと素人的な疑問は感じますが・・
                      • 36592
                      • 970 Posts
                      こんにちは~
                      Quote from: にっく at Nov 10, 2008, 11:52 PM

                      ファイルマネージャーについてのベストソリューションってどうなるでしょうか huh
                      そもそも、FileManagerって何のためにあるの? ってところが定まってないような気もしますが、私個人としては、スニペットがIncludeするファイルや言語ファイルなどをちょこまかと直す時に使ってます。ですので、ほぼ100%がmodxのエンコーディングと同じエンコーディングが必要です。UTF-8で運用していて、EUCなファイルを書き出したいというケースはまずありません。このあたりが違うと、人によって求められる機能も違ってきちゃいますよね~

                      ただ…Safeモードの問題点もありますから…(私、XREAユーザなので)。

                      ・ファイルマネージャーでソース表示する際に、当該ファイルのエンコード形式を検地
                      ・エンコード形式が、管理画面に使用されている文字コードと異なる場合、管理画面に合致させる形で
                       一時的に文字コードを変換
                      ・変換済みの文字コードをファイルマネージャーで表示
                      あとは、書き出しの処理が必要ですね。元々のエンコーディングを記憶しておいて、Web画面上での修正結果をこのエンコーディングに戻して書き出すということになるんでしょうか。

                      読み込みの時も必ずしも正しいエンコーディングが検知できないのであれば、エンコード型式を指定するプルダウンボックスも必要かもしれませんし、書き出しの時も必ずしも元と同じエンコーディングで保存しないかもしれないので、同様なプルダウンボックスでエンコーディングを指定する必要があるかもしれません。
                      Quote from: yama at Nov 11, 2008, 12:32 AM

                      8ビット構成つまりシングルバイト系のiso8859系エンコードでもいろいろあって、化ける時は化けるんですね。だから対応は必要。(だと思う、たぶん。)
                      0.9.6.2が出た時に、文字化けのクレームは各国から出ていましたよ。スカンジナビア系とか。Aの上に丸が付いてるような文字とかが化けるなんて言ってました。だから、エンコードの問題は決して東洋系の漢字文化だけの問題ではないと思います。

                      そもそもphpの処理的に、ファイルを読み込んだままを出力してるのなら、ブラウザのエンコード検出もちゃんとできてるのになぜ化けるのかなと素人的な疑問は感じますが・・
                      PHP素人の私の無責任な推測ですが、ファイルからfget()で読み出したものをhtmlentities()をかまして出力しています。このhtmlentities()関数は、第3引数でエンコーディングの指定をしないとデフォルトとして「ISO-8859-1」と解して処理されるようです。この処理で化けちゃうんじゃないんでしょうかね? ちなみに、保存の方は$_POSTで受け取ったデータをそのままfwrite()でファイルに書き出しているように見えます。