ローカルの2.7.1で「日本語ファイル.jpg」をアップロードしたら「e697a5e69cace8aa9ee38395e382a1e382a4e383ab.jpg」にファイル名が変換されました。
同じくローカルの2.8英語版でアップロードしたらファイル名は変換されずに管理画面上では「日本語ファイル.jpg」ですが、実際のファイル名は「譌・譛ャ隱槭ヵ繧。繧、繝ォ.jpg」になっておりリンクはしませんでした。
まあ、そもそもネット上にアップロードするファイル名が日本語ということに問題があるということは置いておいて(私も記事を投稿してもらう人がPCに詳しくない人でファイル名の説明までしていられない・・・)、変換方法に問題、もしくは変換されなくなっているのではないかと思います。
ちなみに2.5系までは変換されずにアップロードされていた、もしくは日本語が消滅して____.jpgみたいになっていた記憶があります。
これがバグなのかどうかまでの検証はできていません。
はい、shokun0803さんのおっしゃる通りの状況で、2.8から急にunicodeへのエンコードがされなくなったことに、ちょっと戸惑ってます。
「半角英数字のファイル名に変更してからアップしてね」ってのが理解できる相手ばかりなら良いのですが・・・
確認し忘れていましたが、唯一日本語ファイル名を利用できたファーストサーバー上ではどうなっているかというと、「無題.GIF」というファイル名が以下のようにアップロードされていました。
文字化けのままアップして、強引に表示しているようです。
辟。鬘・GIF
辟。鬘・300x226.GIF
辟。鬘・150x150.GIF
辟。鬘・1024x774.GIF
ちなみに、フラッシュアップローダーでもブラウザアップローダーでも変わりません。
なんとなく、エンコード/デコードするためのfunction等を通ってない(あるいは無くなった)ような感じでしょうか?
同じ現象で悩んでいて、ここにたどり着きました。
知人に頼まれて2.8を新規インストールしたのですが、同じように日本語ファイル名の画像はうまくアップロードすることができませんでした。
アップロードディレクトリを見ると「.jpg」という風に2バイト文字がさっくりなくなったファイルが出来上がっておりました。
ちなみにサーバはXREAです。
2.7から2.8にアップデートした自分のサイトでは、問題なく日本語ファイル名の画像がアップロードできています。
新規サイトのほうも、いったん2.7をインストールしてみてから2.8へのアップデートをするといいのかもしれませんね。一度試してみてから、再度書き込みをしたいと思います。
連投すみません。
自分のサイト(2.7から2.8へアップデート)で、日本語名を含むファイルがアップロードできていると書きましたが、勘違いだったかも…..
今、試してみたらダメでした。すみません…..
2.8へアップデートしたところ、同じ現象になりました。
とりあえず、Upload+というプラグインを入れることで対処しています。
http://wordpress.org/extend/plugins/uploadplus/
このプラグインを利用すると、ファイルアップロード時にファイル名に
おかしな文字列がある場合には自動的に変換してくれ、また日付やタイム
スタンプなどのプリフィックスを自動的に付けてくれます。
ファイル名のサニタイズの仕様が変わり、ファイル名のマルチバイト部分が変換されずにアップロードされるようになったためですね。
この問題の修正を WP Multibyte Patch に組み込んでみましたのでよろしければ試してみてください。
WP Multibyte Patch 1.1.4
従来の urlencode から % を除去するスタイルだとファイル名が長くなる場合があるので urlencode が 必要なファイル名は md5 に変換するようにしています。
urlencode が 必要なファイル名は md5 に変換するようにしています。
国際化ドメイン名で使われる punycode 変換はどうでしょう? これだと、元のファイル名に含まれる ASCII 文字はそのまま残りますし、元の日本語ファイル名に戻すことも可能です。WordPress コアコードに取り込んでもらうのも納得してもらいやすい気がします。
Ktai Entry でも、日本語のみのファイル名は md5 を使っていますが、Punycode はどうだろうかと検討しているところです。
WPMB1.1.4 のテストです。(ローカル:winXP XAMPP)
wp2.8.1-ja wpmb1.1.3 での日本語ファイル.jpgアップロード
管理画面上は 日本語ファイル.jpg
サーバ上のファイルは 譌・譛ャ隱槭ヵ繧。繧、繝ォ.JPG
画像はリンク切れ。
wpmb1.1.3を停止、削除
wpmb1.1.4をアップロード、有効化
wp2.8.1-ja wpmb1.1.4 での日本語ファイル.jpgアップロード
管理画面上 fc1143de72999b283e33e06728479616.JPG
サーバ上のファイル fc1143de72999b283e33e06728479616.JPG
管理画面のタイトルのみ 日本語ファイル となっています。
画像のリンクも確認。
以上ローカルでの確認のみです。
チカッパ!レンタルサーバーにセットアップしてあるwp2.8.1-jaでwpmb1.1.4の動作確認をしてみました。
shokun0803さまと同様の結果になりました。日本語ファイル名のファイルを、md5に変換したファイル名でアップロードすることができました。画像リンクも問題なしです。Upload+プラグインとの併用でもOKでした。
lilyfan さん
Punycode 案、選択肢として悪くないと思います。
エンコード後の文字列が短いですし、半角スペースがそのままなところも sanitize_file_name() のコードと併せると問題にはなりませんね。
手頃な PHP 用のライブラリは存在するのでしょうか。
shokun0803 さん、9steps さん
確認ありがとうございました。2.8.2-ja に同梱させていただきました。
遅くなりましたが、WPMB1.1.4 で正常にファイルアップロード出来ること確認できました。
ありがとうございました。
ステータスを「解決」に変更します。
P.S.
このプラグイン止めると日本語ファイル名アップが出来ないってことだから、
不用意に止められないように、本体に組み込んでほしいなぁ・・・