サポート » プラグイン » basename() 関数で日本語パスが取れない場合の対応方法は?

  • いつもお世話になっています。日本語名を含むファイルパスの取得についてご教示ください。

    EWWW Image Optimizerという画像圧縮プラグインを使っているのですが
    漢字を含む日本語名の画像ファイルを変換する際に、ファイル名が正しく取得できない問題が発生しました。
    そこで作者の方にデバッグ情報を送ったところ「basename() のlocaleの問題のようだがこちらでは再現できなかった」と言われました。
    そして、「そちらでApacheやPHPのlocaleを修正してUTF-8が適切に動くか確認する必要がある」とのことでした。

    そこで質問なのですが、これはサーバー側をどうにかしないといけない問題なのでしょうか?
    Wordpressでは日本語名の画像ファイルを正常にアップロード出来ており、メディアなどから閲覧できるので、プラグイン側で解決できる話かもしれないと思ったのです。

    どのような解決法を辿るのがスマートか、助言を頂けると大変助かります。

    以下は私の考えですが、素人なのでおかしなことを言ってたらご指摘いただきたいです。

    basename()の説明で、「マルチバイトの場合にはsetlocale()を行え」と言っているみたいです。
    https://www.php.net/manual/ja/function.basename.php

    そこで、EWWWプラグイン内でbasename()でファイル名を取得する前に
    setlocale(LC_ALL, ‘ja_JP.UTF-8’);
    などの対応を挟んでもらえれば解決するのかもしれないと予想しています。

    また、調べている中でwp_basename()という関数があることを知りました。

    Home


    i18n friendly version of basename()と書いてあり、basename()を国際化対応したようなものに読めるのですが、basename()をwp_basename()に置き換えて解決したりしないでしょうか。

    拙い説明で恐縮ですが、どうぞよろしくお願い致します。

    • このトピックはschreib02が8ヶ月、 2週前に変更しました。
2件の返信を表示中 - 1 - 2件目 (全2件中)
  • @schreib02 さん

    こんにちは。

    WordPressでは日本語名の画像ファイルを正常にアップロード出来ており、メディアなどから閲覧できるので、プラグイン側で解決できる話かもしれないと思ったのです。

    →通常、WordPressに日本語ファイル名のメディアをアップロードすると、英数字の羅列に変換されるはずですが、何かカスタマイズされているか、プラグインを入れていないでしょうか。
    もしファイル名にこだわりがなければ、それらを無効にする事で解決出来るのではないかと思います。

    そこで、EWWWプラグイン内でbasename()でファイル名を取得する前に
    setlocale(LC_ALL, ‘ja_JP.UTF-8’);
    などの対応を挟んでもらえれば解決するのかもしれないと予想しています。

    →プラグインのロケールが日本語に固定されてしまうので、それは難しいと思います。

    i18n friendly version of basename()と書いてあり、basename()を国際化対応したようなものに読めるのですが、basename()をwp_basename()に置き換えて解決したりしないでしょうか。

    →そのプラグインの詳細が分からないのでお答えできませんが、よろしければissueやプルリクエストを送ってみてはいかがでしょうか。

    トピック投稿者 schreib02

    (@schreib02)

    @wildworks さん、ご返信ありがとうございます。

    「日本語名のファイル運用をしない」という解決方法は今回のケースでは取れません。
    ただ、それがプラグインなどで行われているものだということは存じませんでしたので勉強になりました。

    ロケールについては影響範囲などがまだよくわかっていないので引き続き勉強しつつ
    自力で解決できなければ作者の方へ改めて連絡してみたいと思っています。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「basename() 関数で日本語パスが取れない場合の対応方法は?」には新たに返信することはできません。