【发布时间】:2014-05-20 06:04:28
【问题描述】:
我有一个 PHP 应用程序,它的文件编码是希腊 ISO (iso-8859-7)。我想将文件转换为 utf-8,但仅使用 utf-8 保存文件是不够的,因为希腊文本会出现乱码。有没有一种“自动”的方法来做到这一点,这样我就可以完全转换我的应用程序的编码,而不必遍历每个文件并重写文本?
【问题讨论】:
标签: php encoding utf-8 character-encoding file-encodings
我有一个 PHP 应用程序,它的文件编码是希腊 ISO (iso-8859-7)。我想将文件转换为 utf-8,但仅使用 utf-8 保存文件是不够的,因为希腊文本会出现乱码。有没有一种“自动”的方法来做到这一点,这样我就可以完全转换我的应用程序的编码,而不必遍历每个文件并重写文本?
【问题讨论】:
标签: php encoding utf-8 character-encoding file-encodings
在 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))
);
}
【讨论】:
试试iconv函数
$new_string = iconv("ISO-8859-7", "UTF-8", $old_string);
【讨论】:
<?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);
}
?>
【讨论】:
以下代码应该适合你,它是一个 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 以在保存前进行一些替换。
【讨论】: