10

如何在 PHP 中设置文本文件编码(例如 UTF-8)?

让我告诉你我的问题。这是我的代码:

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

输出:اÙ

fwrite()有类似的输出。

但是当我test.txt通过记事本创建并设置字符集UTF-8时,输出就是我想要的。我想在 PHP 文件中设置字符集。

现在这是我的问题:如何通过 PHP 设置文本文件编码?

4

4 回答 4

20

PHP 在文件中存储文本时不应用编码:它完全按照字符串中的布局存储数据。

你提到你在打开文件时遇到问题notepad.exe。那个文本编辑器不太擅长猜测你打开的文件的编码;如果文本以 UTF-8 编码,则必须选择将其打开为 UTF-8。如果可能,请使用其他文本编辑器。Notepad++是一种流行的替代品。

如果您必须使用notepad.exe,作为最后的手段,请在写入任何其他内容之前将字节顺序标记写入文件;这将使其将文件识别为 UTF-8,同时可能使文件无法用于其他目的(有关详细信息,请参阅 Wikipedia 文章)。

file_put_contents("file.txt", "\xEF\xBB\xBF" . $data);
于 2013-09-28T19:58:51.873 回答
14

您可以尝试使用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 上试试这个。

于 2013-09-28T13:35:27.587 回答
1

尝试:

file_put_contents('test.txt', utf8_encode($data)); 
于 2013-09-28T13:35:25.633 回答
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;
}
?>
于 2015-05-12T09:15:53.877 回答