2011-11-30 5 views
7

ファイルシステムのエンコーディングのオペレーティングシステムをデフォルトとして検出したいのですが、異なる言語バージョンのWindows OSのように、別のエンコーディングを使用します(iso-8859-1、ms950、big5、gb2312..etc) PHPのエンコーディングの異なるオペレーティングシステムですか?何か案が?ありがとう。PHPでオペレーティングシステムのエンコーディングを検出するには?

+0

ここで、エンコードの識別に関するその他の質問を確認しましたか?この例を見てみましょう:http://stackoverflow.com/questions/910793/php-detect-encoding-and-make-everything-utf-8またはこれ1つ:http://stackoverflow.com/questions/505562/ detect-file-encoding-in-php –

+0

ファイルシステムがエンコーディングを委任しているかどうかわかりません... mb_list_encodingsはサポートされているエンコーディングのリストを返します。 – Incognito

+0

それは私が答えたいとは思わない、それは私と別の質問です – Jasper

答えて

1

Linuxにはエンコードがありません。ファイル名はバイナリ文字列で保存され、何かを含むことがあります。特定のエンコーディングでそれを解釈することは、アプリケーションに依存します。ほとんどの場合、これは単純にUTF-8になります。しかし、確かに、それはファイル名の 'ビューア'に依存します。残念ながら、私はそれが窓の上にあるものはお答えできません

D.

フォームUTF-8正規化を使用するOS/Xのファイルシステムへのアクセス

。内部的には、UTF-16のバリエーションとして保存されていますが、私のマシン上でPHP経由でアクセスするのは、apiはCP-1252ですが、これは言語に依存します。

0

ファイルシステムがはエンコーディングの種類を持っていない、各ファイルがエンコーディングの異なる種類を使用することができますので、あなたが必要とするすべてを見つけるのであるをコードするコード・ページを変換する必要がある

print_r(explode(";", setlocale(LC_ALL, 0))); 

をお試しくださいファイル名文字列を処理するための正しいエンコーディング。

ファイル名のエンコーディングを検出するには、そのファイル名を既知のすべてのエンコードリストに変換し、元のファイル名の文字列と変換された文字列を比較するだけです。等しいならば、エンコーディングは探しているものです。 。

文字列をある種のエンコーディングに変換します。This wayを使用します。この作業を行うには、次のコードを参考にしてください。

function getActuallEncoding($text) { 
    $encodingList = array('UTF-8', 'gb2312', 'ISO-8859-1', 'big5'); // Add more if you need. 
    foreach($encodingList as $oneEncode) { 
     $oneResult = iconv(mb_detect_encoding($text, mb_detect_order(), true), $oneEncode, $text); 
     if(md5($oneResult) == md5($text)) return $oneEncode; 
    } 
    return "UNKNOWN"; // This return value may cause problem, just let you know. 
} 

希望します。

関連する問題