3

ファイルのエンコーディングがギリシャの ISO (iso-8859-7) である PHP アプリケーションがあります。ファイルを utf-8 に変換したいのですが、単にファイルを utf-8 で保存するだけでは、ギリシャ語のテキストが文字化けするので十分ではありません。各ファイルを調べてテキストを書き直すことなく、アプリのエンコーディングを完全に変換できるように、これを行う「自動」方法はありますか?

4

4 に答える 4

6

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))
        );
}
于 2014-05-17T14:38:56.367 に答える
1

iconv関数を試す

$new_string = iconv("ISO-8859-7", "UTF-8", $old_string);
于 2014-04-07T20:06:57.633 に答える
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); 
}

?>
于 2014-05-21T14:02:11.620 に答える
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 行目の char を削除#して、保存する前にいくつかの置換を行うことができます。

于 2014-05-24T04:07:18.227 に答える