web-dev-qa-db-ja.com

PHPでテキストファイルエンコーディングを設定する方法

PHPでテキストファイルエンコード(UTF-8など)を設定するにはどうすればよいですか?

私の問題をお見せしましょう。これは私のコードです:

_<?php 
file_put_contents('test.txt', $data); // data is some non-English text with UTF-8 charset
?>
_

出力:_اÙ_!

fwrite()にも同様の出力があります。

しかし、メモ帳で_test.txt_を作成し、文字セットTF-8を設定すると、出力が必要になります。文字セットをPHPファイルに設定します。

これが私の質問です:PHPによるテキストファイルエンコーディングの設定方法は?

9
Programmer.zip

PHPは、テキストをファイルに保存するときにエンコーディングを適用しません。データは文字列に配置されたとおりに保存されます。

notepad.exeでファイルを開くときに問題が発生するとのことですが、そのテキストエディターは、開いているファイルのエンコードを推測するのがあまり得意ではありません。テキストがUTF-8でエンコードされている場合は、UTF-8として開くことを選択する必要があります。可能であれば、別のテキストエディタを使用してください。 Notepad ++ は人気のある代替品です。

notepad.exeを使用する必要がある場合は、最後の手段として、何かを書き込む前に Byte Order Mark をファイルに書き込みます。これにより、ファイルがUTF-8として認識され、ファイルが他の目的で使用できなくなる可能性があります(詳細については、Wikipediaの記事を参照してください)。

file_put_contents("file.txt", "\xEF\xBB\xBF" . $data);
17
Joni

mb_convert_encoding を使用してこれを試すことができます

$data = mb_convert_encoding($data, 'UTF-8', 'auto');
file_put_contents('test.txt', $data);

iconv も確認してください。

Update:(これを試して、テキストに適したエンコーディングを見つけてください)

foreach(mb_list_encodings() as $chr){ 
    echo mb_convert_encoding($data, 'UTF-8', $chr)." : ".$chr."<br>";    
}

また、これを GitHub で試してください。

10
The Alpha

試してください:

file_put_contents('test.txt', utf8_encode($data)); 
1
BAD_SEED

文字列配列をutf8エンコードされた文字列配列に変換する関数と、デコードしてメモ帳ファイルに書き込む関数を作成できます。

<?php
function utf8_string_encode(&$array){
    $myencode = function(&$value,&$key){
        if(is_string($value)){
            $value = utf8_encode($value);
        } 
        if(is_string($key)){
            $key = utf8_encode($key);
        }
        if(is_array($value)){
            utf8_string_encode($value);
        }
    };
    array_walk($array,$func);
    return $array;
}
?>
0
Asuquo12