最近、php を介して ftp に似た web-ftp プラットフォームを作成しています。
Linux と window のパス アクセスと互換性がある必要があります。
その過程で、window と Linux で使用されるパス エンコーディングが異なることがわかりました。たとえば、Linux は utf-8 のようです。ウィンドウは gbk です。パスに中国語が含まれている場合、file_exists などの fs メソッドは utf-8 エンコーディングを使用します。
パスが存在しないため、utf-8 が gbk 形式に従ってパス エンコーディングを解析すると、パスが存在しないためエラーが発生するためです。今回は、現在のシステムのエンコーディングを自動的に検出する必要があります。
Google で検索しましたが、PHP に組み込まれているシステム エンコーディングを検出する有効な方法が見つかりませんでした。考えた結果、それを解決する次の解決策: Linux と Windows での現在のテストは正しいです;
```php
//Put utf8 エンコーディングを現在のシステム エンコーディングに変換します
protected static function _toOsCode($str, $coding = null) {
$enc = 'UTF-8';
‐ ‐ ‐ ‐ ‐ ‐ ‐ $coding = $ osPathEncoding; 、中国語のファイルを 1 つだけ配置でき、別のエンコーディングを使用してテストされます。ファイルを読み取ることができる場合、それは意味します。エンコーディングは正しいです
protected static function _detectOsCode() {
$codingFile = '/coding-encoding-os-path.html';
$detectPath = __DIR__ .$codingFile;
$allCoding = mb_list_encodings(); |UCS-4LE|UCS-2|UCS-2BE|UCS-2LE|UTF-32|UTF-32BE|UTF-32LE|UTF-16|UTF-16BE|UTF-16LE|', '|'.$coding。 '|')) {//一部のエンコーディングは不正なパスに変換されるため、検出する必要はありません
continue if (@file_exists( $maybe)) {
self::_httpCode('システムパスファイルを検出(フォルダー) 名 エンコードに失敗しました: 考えられる理由の 1 つは、「.$codingFile.」ファイルが削除されているか、読み取り権限がないことです (500);
上記では、PHP が回避策を通じてシステムのフォルダー パス エンコーディングを検出する方法を、関連する内容も含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。