如何以UTF-8格式写文件?

Sta*_*ter 45 php encoding utf-8 iconv mbstring

我有一堆不是UTF-8编码的文件,我正在将一个站点转换为UTF-8编码.

我正在使用简单的脚本来保存我想要保存在utf-8中的文件,但文件以旧编码保存:

header('Content-type: text/html; charset=utf-8');
mb_internal_encoding('UTF-8');
$fpath="folder";
$d=dir($fpath);
while (False !== ($a = $d->read()))
 {

 if ($a != '.' and $a != '..')
  {

  $npath=$fpath.'/'.$a;

  $data=file_get_contents($npath);

  file_put_contents('tempfolder/'.$a, $data);

  }

 }
Run Code Online (Sandbox Code Playgroud)

如何以utf-8编码保存文件?

use*_*584 70

添加物料清单:UTF-8

file_put_contents($myFile, "\xEF\xBB\xBF".  $content); 
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案......简短而甜蜜,而且有效! (2认同)
  • 创建识别为UTF-8的文件与转换内容到该文件之间是有区别的。不带特殊字符的纯文本文件与不带BOM的UTF-8具有相同的内容,可能正在处理文本的解析器也具有编码选项。PHP本身使用UTF-8,因此,如果您看到文本确定,但文件似乎不是UTF-8,则很可能是文本为UTF-8,只需添加BOM。但是,它没有转换。经常看到此问题,因为PHP懒于添加BOM,但它本身在输入时就期望得到它。 (2认同)

Arn*_*anc 47

file_get_contents/file_put_contents不会神奇地转换编码.

你必须明确地转换字符串; 例如用iconv()mb_convert_encoding().

试试这个:

$data = file_get_contents($npath);
$data = mb_convert_encoding($data, 'UTF-8', 'OLD-ENCODING');
file_put_contents('tempfolder/'.$a, $data);
Run Code Online (Sandbox Code Playgroud)

或者,使用PHP的流过滤器:

$fd = fopen($file, 'r');
stream_filter_append($fd, 'convert.iconv.UTF-8/OLD-ENCODING');
stream_copy_to_stream($fd, fopen($output, 'w'));
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下效率更高,因为正在检索的数据直接通过转换函数和输出流提供,无需任何中间存储,或转移到PHP内存然后再次输出 (3认同)

Ala*_*laa 25

<?php
function writeUTF8File($filename,$content) { 
        $f=fopen($filename,"w"); 
        # Now UTF-8 - Add byte order mark 
        fwrite($f, pack("CCC",0xef,0xbb,0xbf)); 
        fwrite($f,$content); 
        fclose($f); 
} 
?>