转换文件编码

时间:2014-04-07 19:58:28

标签: php encoding utf-8 character-encoding file-encodings

我有一个PHP应用程序,其文件编码是希腊语ISO(iso-8859-7)。我想将文件转换为utf-8,但只是保存utf-8文件不够,因为希腊语文本会出现乱码。是否有"自动"这样做的方法,以便我可以完全转换我的应用程序的编码,而无需浏览每个文件并重写文本?

4 个答案:

答案 0 :(得分:5)

在Linux系统上,如果您确定所有文件当前都是用ISO-8859-7编码的,那么您可以这样做:

bash> find /your/path -name "*.php" -type f \
    -exec iconv "{}" -f ISO88597 -t UTF8 -o "{}.tmp" \; \
    -exec mv "{}.tmp" "{}" \;

这将转换/your/path中所有PHP脚本文件以及所有子目录。删除-name "*.php"以转换所有文件。


由于您使用的是Windows,因此最简单的选项就是这样的PHP脚本:

<?php
$path = realpath('C:\\your\\path');

$iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($path), 
    RecursiveIteratorIterator::SELF_FIRST
);

foreach($iterator as $fileName => $file){
    if($file->isFile())
        file_put_contents(
            $fileName,
            iconv('ISO-8859-7', 'UTF-8', file_get_contents($fileName))
        );
}

答案 1 :(得分:1)

尝试iconv功能

$new_string = iconv("ISO-8859-7", "UTF-8", $old_string);

答案 2 :(得分:1)

<?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); 
}

?>

答案 3 :(得分:0)

以下代码应该适合您,它是一个PowerShell脚本,您可以Start > Run > powershell并在修改所需行后粘贴代码。

$sourcepath = "d:\temp\old\"
$targetpath = "d:\temp\new\"
foreach ($file in Get-ChildItem $sourcepath -Filter *.php -Recurse) {
  $content = [System.IO.File]::ReadAllBytes($sourcepath + $file)
  $str = [System.Text.Encoding]::GetEncoding("ISO-8859-7").GetString($content)
  # $str = $str.Replace("ISO-8859-7", "UTF-8")
  [System.IO.File]::WriteAllText($targetpath + $file, $str)
}

您可以在第6行删除#字符,以便在保存之前进行一些替换。