PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPのpathinfo()でUTF-8ファイル名を正しく取得する方法

PHPのpathinfo()でUTF-8ファイル名を正しく取得する方法

PHPのコア関数の多くは、Latin-1(ISO-8859-1)以外の文字セットを正しく扱うことができません。そのため、日本語などのマルチバイト文字を含むファイル名をpathinfo()に渡しても、期待どおりの結果が得られない場合があります。

しかし、pathinfo()を呼び出す前にsetlocale()でロケールを適切に設定しておけば、UTF-8でエンコードされたファイル名でも正しい結果を取得できるようになります。

ロケールの初期設定について

デフォルトでは、PHPは「C」ロケールで動作します。一方、CLIスクリプトは多くの環境でデフォルトのUTF-8ロケールを使用して実行されます。Webサーバー上で他の文字列処理関数を呼び出す前に、ロケールを「C」から「C.UTF-8」または「en_US.UTF-8」へ変更しておきましょう。

setlocale(LC_ALL,'en_US.UTF-8');
pathinfo($OriginalName, PATHINFO_FILENAME);
pathinfo($OriginalName, PATHINFO_BASENAME);

実装時のポイント

  • setlocale()による設定はリクエストごとにリセットされるため、必要な処理の直前に毎回設定するのが安全です。
  • サーバーのOSによって利用可能なロケール名が異なる場合があるため、事前に利用環境での動作を確認してください。
  • さらに確実にマルチバイト文字を扱いたい場合は、mbstring拡張モジュールの活用も検討するとよいでしょう。
  1. PHPのpathinfo()関数とは?ファイルパス情報を取得する方法を徹底解説

    PHPのpathinfo()関数は、ファイルパスに関する情報を連想配列として取得できる便利な関数です。パス文字列からディレクトリ名、ファイル名、拡張子などを簡単に取り出せるため、ファイル操作を行う際によく使われます。 第2引数を省略した場合、pathinfo()は以下の要素を含む連想配列を返します。 dirname(ディレクトリ名) − パスのディレクトリ部分を返します basename(ベース名) − 拡張子付きのファイル名を返します extension(拡張子) − ファイルの拡張子を返します 基本構文 pathinfo(path, options) パラメータ path − 情報を

  2. Pythonでサブ配列を1回反転するだけで配列がソートされるかどうかを判定する方法

    すべての要素がユニーク(重複なし)である配列 nums があるとします。この配列の部分配列(サブ配列)を1つだけ反転したとき、配列全体がソートされた状態になるかどうかを判定するのが本記事のテーマです。なお、配列がすでにソート済みの場合も True を返します。 たとえば、入力が nums = [4,6,27,25,15,9,37,42] の場合を考えてみましょう。[27,25,15,9] の部分を反転すると [4,6,9,15,25,27,37,42] となり、配列全体が昇順に整列します。したがって、この場合の出力は True になります。 アルゴリズムのアプローチ この問題は、配列を一