| Здравствуйте, уважаемые программисты.
Веб-приложение написано в кодировки windows - 1251.
Приложение содержит как в корне php файлы так и папки с файлами php, т.е. в каждой директории есть файлы так и ещё поддиректории.
Задача состоит в конвертировании всех php файлов в utf-8.
Я "нашёл" функцию конвертирования на сайте http://webkev.com/2011/03/01/konvertiruem-windows-1251-v-utf-8-s-pomoshhyu-php/ и решил создать функцию для конвертирования всех файлов заданной директории. Полный код выгледет следующим образом :
<?php
/*
*Функция перекодировки windows-1251 -> utf-8
*/
function win2utf($str)
{
static $table = array(
"\xA8" => "\xD0\x81",
"\xB8" => "\xD1\x91",
"\xA1" => "\xD0\x8E",
"\xA2" => "\xD1\x9E",
"\xAA" => "\xD0\x84",
"\xAF" => "\xD0\x87",
"\xB2" => "\xD0\x86",
"\xB3" => "\xD1\x96",
"\xBA" => "\xD1\x94",
"\xBF" => "\xD1\x97",
"\x8C" => "\xD3\x90",
"\x8D" => "\xD3\x96",
"\x8E" => "\xD2\xAA",
"\x8F" => "\xD3\xB2",
"\x9C" => "\xD3\x91",
"\x9D" => "\xD3\x97",
"\x9E" => "\xD2\xAB",
"\x9F" => "\xD3\xB3",
);
return preg_replace('#[\x80-\xFF]#se',
' "$0" >= "\xF0" ? "\xD1".chr(ord("$0")-0x70) :
("$0" >= "\xC0" ? "\xD0".chr(ord("$0")-0x30) :
(isset($table["$0"]) ? $table["$0"] : "")
)',
$str
);
}
//echo win2utf("Строка в win-1251");
function myfunction ($dir) {
//if ($handle0==''){exit();}else {
$handle0=opendir($dir);
//}
while($file0=readdir($handle0)) {
//echo "<br>Название файла".$file0;
if($file0 != "." && $file0!= ".." and substr($file0,-3)=="php") {
$filename0 = $dir."/".$file0;
$file01 = fopen ($filename0,"r");
$contents0 = fread($file01, filesize($filename0));
$contents0 = win2utf ($contents0) ;
echo $contents0;
fclose($file01);
$file02 = fopen ($filename0,"w");
$contents0 = fwrite($file02, $contents0);
fclose($file02);
}
elseif ($file0 != "." && $file0!= "..")
{
myfunction ($file0);
}
}
closedir($handle0);
//return $dir;
}
myfunction("..");
?>
Проблема в том, что производится конвертирование только конвертирования конрня (myfunction(".."); ), подкаталоги пропускает.
В чём может быть ошибка?
Естественно мета данные переписал : <meta http-equiv=content-type content="text/html; charset=UTF-8;"> | |