如何在PHP中设置文本文件ENCODING(例如UTF-8)?
让我告诉你我的问题。这是我的代码:
<?php
file_put_contents('test.txt', $data); // data is some non-English text with UTF-8 charset
?>
输出:اÙ
!
fwrite()
具有类似的输出。
但是当我通过记事本创建test.txt
并设置charset UTF-8 时,输出就是我想要的。
我想在PHP文件中设置charset。
现在这是我的问题:如何通过PHP设置文本文件编码?
答案 0 :(得分:17)
在文件中存储文本时,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);
答案 1 :(得分:9)
您可以使用mb_convert_encoding
尝试此操作$data = mb_convert_encoding($data, 'UTF-8', 'auto');
file_put_contents('test.txt', $data);
同时检查iconv。
更新(尝试此操作并为您的文字找到正确的编码)
foreach(mb_list_encodings() as $chr){
echo mb_convert_encoding($data, 'UTF-8', $chr)." : ".$chr."<br>";
}
另外,请在GitHub上尝试此操作。
答案 2 :(得分:1)
尝试:
file_put_contents('test.txt', utf8_encode($data));
答案 3 :(得分:0)
您可以创建一个函数,将字符串数组转换为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;
}
?>