2011-11-08 5 views
0

JavaScriptファイルをループしてエンコードを検出し、latin1とutf8形式で保存しようとしています。これまでは、PHPを使ってUTF-8ファイルをLatin1に変換しようとしていました。私は周りを検索した後にデータをエンコードするいくつかの異なる方法を試しましたが、何も動作していないようです。PHPを使用してLinuxでデータをLatin 1に変換できない

//Read file 
$fileIn = fopen($dirName . $fileNameIn, 'r'); 
$dataIn = fread($fileIn, filesize($dirName . $fileNameIn)); 
fclose($fileIn); 

$encoding = mb_detect_encoding($dataIn); 
echo "Encoding in: " . $encoding . "\r\n"; 

$dataOut = utf8_decode($dataIn); 

echo "Encoding after: " . mb_detect_encoding($dataOut) . "\r\n"; 

これらの印刷物の印刷検出エンコーディングとしてUTF-8の両方を:ここで

は私がやっているものです。何か案は?

これは、私のubuntuボックスのシステムのデフォルトがUTF-8であるという事実と関係がありますか?

答えて

1

あなたはiconvの機能(http://www.php.net/manual/en/book.iconv.php)を見てとることをお勧めします。そのため

string iconv (string $in_charset , string $out_charset , string $str) 

を、

を書いてみてください
$dataOut = iconv($encoding, "ISO-8859-1", $dataIn); 

この問題が解決するかどうかを確認してください。また、mb_detect_encodingでstrictモードを使用してみてください:それはエンコードを判別することは技術的には可能ではないよう

mb_detect_encoding($dataOut, mb_detect_order(), true); 
+0

この変換は、エンコーディングが変更されたことを検出したという意味で機能しているようです。しかし、ディスクに書き込むと、PHPはまだUTF-8ファイルを作成します。 – Kristofer

+0

これは現在動作しているため、一部のデータを変換していない可能性があります(検出は信頼性がありません) – Kristofer

1

mb_detect_encodingは、誤った名称であるかもしれません。エンコーディングがわからない場合は、推測することしかできません(Summaries of supported encodings参照)。

技術的に言えば、文字列は複数のエンコーディングを持つことができますが、mb_detect_encodingは1つの値しか返しません。そして、書かれているように、エンコーディングを検出することは技術的に可能ではありません。

echo "Encoding after: " . mb_detect_encoding($dataOut, 'ISO-8859-1', TRUE) . "\r\n"; 

は多分これが唯一のISO-8859-1のために、チェックを助け、それは厳しいん:あなたは特定エンコーディングをチェックしたよう

、あなたは追加のパラメータを利用することができます。

関連する問題