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

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

Dec 06, 2024 am 09:06 AM

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

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

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

1

2

$dir_name = "Depósito";

mkdir($dir_name);

ログイン後にコピー

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

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

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

1

2

$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 までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

11ベストPHP URLショートナースクリプト(無料およびプレミアム) 11ベストPHP URLショートナースクリプト(無料およびプレミアム) Mar 03, 2025 am 10:49 AM

11ベストPHP URLショートナースクリプト(無料およびプレミアム)

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelでフラッシュセッションデータを使用します

Instagram APIの紹介 Instagram APIの紹介 Mar 02, 2025 am 09:32 AM

Instagram APIの紹介

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelテストでの簡略化されたHTTP応答のモッキング

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPのカール:REST APIでPHPカール拡張機能を使用する方法

LaravelのバックエンドでReactアプリを構築する:パート2、React LaravelのバックエンドでReactアプリを構築する:パート2、React Mar 04, 2025 am 09:33 AM

LaravelのバックエンドでReactアプリを構築する:パート2、React

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

Codecanyonで12の最高のPHPチャットスクリプト

Laravelの通知 Laravelの通知 Mar 04, 2025 am 09:22 AM

Laravelの通知

See all articles