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によるテキストファイルエンコーディングの設定方法は?
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);
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 で試してください。
試してください:
file_put_contents('test.txt', utf8_encode($data));
文字列配列を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;
}
?>