ホームページ >バックエンド開発 >PHPチュートリアル >PHP で UTF-8 ファイル名を持つディレクトリを安全に作成するにはどうすればよいですか?

PHP で UTF-8 ファイル名を持つディレクトリを安全に作成するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-06 09:06:11631ブラウズ

How Can I Safely Create Directories with UTF-8 Filenames in PHP?

UTF-8 文字列を使用した PHP ファイルシステム関数の利用

PHP では、ファイルシステム関数を操作するときに UTF-8 文字列を処理すると、課題が生じる可能性があります。次のシナリオを考えてみましょう:

$dir_name = "Depósito";
mkdir($dir_name);

この例では、「Depósito」という名前のフォルダーを作成しようとします。ただし、Windows エクスプローラーで表示すると、フォルダー名が「Depósito」と表示され、UTF-8 以外の文字が歪んで表示されます。

解決策: UTF-8 文字列の Urlencoding

この問題を解決するには、文字列をファイルシステム関数で使用する前に URL コード化することをお勧めします。 Urlencoding により、すべての文字が有効な形式に変換されます。

$dir_name_encoded = urlencode("Depósito");
mkdir($dir_name_encoded);

文字列を urlencoding することにより、非 UTF-8 文字がエンコードされた対応する文字に変換され、正しい名前でフォルダーを作成できるようになります。 .

考慮事項

urlencoding は効果的ですが、

  • エンコードされたファイル名は 255 文字を超えてはなりません。
  • 1 つの文字に対して複数の UTF-8 表現が存在する場合 (文字の結合など)、正規化一貫性のために必要な場合があります。
  • 標準関数を使用したアルファベット順の並べ替えには、ファイル名をデコードし、UTF-8 対応を使用する必要があります。

代替ソリューション (あまり望ましくない)

その他のあまり望ましくない解決策は次のとおりです。

  • ISO- 8859-1 互換性: ファイル名文字を表現できるものに制限するISO-8859-1 に記載されています。ファイルシステム関数で使用する前に utf8_decode() を使用して UTF-8 文字列を変換し、 utf8_encode() を使用して scandir によって返されたファイル エントリを変換します。

注意事項:

  • 非 ASCII バイトがファイル内に存在する場合、このメソッドは失敗する可能性があります。 filename.
  • Windows はロケールごとに異なるエンコーディングを使用する場合があり、より複雑な変換関数の使用が必要になります。

音訳:

In UTF-8 との互換性が不可欠な場合は、文字変換を使用して非 ASCII 文字をターゲットと互換性のある同等の ASCII 文字に変換することを検討してください。ファイルシステム。

以上がPHP で UTF-8 ファイル名を持つディレクトリを安全に作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。