ホームページ > バックエンド開発 > PHPチュートリアル > PHP は回避策を使用してシステム フォルダー パスのエンコーディングを検出します

PHP は回避策を使用してシステム フォルダー パスのエンコーディングを検出します

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-13 12:21:26
オリジナル
1029 人が閲覧しました

PHP は回避策によってシステムのフォルダー パス エンコーディングを検出します
最近、私は PHP を使用して ftp に似た Web-ftp プラットフォームを作成しています。
Linux およびウィンドウ パス アクセスと互換性がある必要があります。
そのプロセス中, window と Linux で使用されるパスのエンコーディングが異なることがわかりました。たとえば、linux は utf-8 であるようですが、
php のエンコーディングはパスに中国語が含まれている場合は utf-8 を使用します。パスにアクセスするための utf-8 エンコーディング。 file_exists などの fs メソッドにアクセスできない場合があります。
パスが存在しないため、utf-8 が gbk 形式に従ってパス エンコーディングを解析するためです。中国語は別の文字になっているはずです。パスが表示されます。


このとき、現在のシステムのエンコーディングを自動的に検出する必要があります。 Google で検索しましたが、PHP に組み込まれているシステム エンコーディングを検出する効果的な方法が見つかりませんでした。
考えた後、次の解決策を使用して解決しました: Linux と Windows での現在のテストは正しいです。




```php



// utf8 エンコーディングを現在のシステム エンコーディングに変換します
protected static function _toOsCode($str, $coding = null) {
$enc = 'UTF-8';

if (empty($coding)) {
return $str;
}


//システム エンコーディングを検出します
//現時点では適切な方法が見つかりません。唯一の方法は、中国語のファイルを配置し、検出のために別のエンコーディングを再利用することです。エンコーディングは正しいです
protected static function _detectOsCode() {
$codingFile = '/coding-encoding-os-path.html';
$detectPath = __DIR__ .$codingFile;
$allCoding = mb_list_encodings ();
foreach ($allCoding as $coding) {
if (false !==tripos('|byte2be|byte2le|byte4be|byte4le|UCS-4|UCS -4BE|UCS-4LE|UCS- 2|UCS-2BE|UCS-2LE|UTF-32|UTF-32BE|UTF-32LE|UTF-16|UTF-16BE|UTF-16LE|', '|'.$ コーディング。'|')) {/ /一部のエンコーディングは不正なパスに変換されるため、検出する必要はありません
$coding);



} }


if (empty(self::$osPathEncoding)) {
self::_httpCode('システム パス ファイル (フォルダー) 名のエンコーディングの検出に失敗しました。考えられる理由の 1 つは '.$codingFile です。'ファイルは削除されているか、読み取り権限がありません', 500);

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート