Нужно было срочно на винде конвертнуть файлы из windows-1251 в UTF-8.К своему удивлению не нашел сходу ничего рабочего под винду. Попробовал Штирлиц и EncodingMasterPC. Ничего не сработало так как надо: выбрал папку, нажал конвертировать и получил переконвертированые файлы.
По этому, накидал очень быстро очень простой скрипт на пэхапе, который запустил локально и конвертнул все что надо.
Сюда выкладываю больше как в хранилище, чтобы у меня самого был рабочий пример под рукой, который не нужно долго искать. Уверен, что в интернете полно подобных решений, но в своем я больше уверен, да и задача такая, что быстрее самому написать, чем искать готовое.
And so you code..
<?
@set_time_limit(0);
define('PATH4CLEAR', 'D:\decode');
define('SEP', '\\');
if (!file_exists(PATH4CLEAR) || !is_dir(PATH4CLEAR))
die("Указанный путь не существует!");
$exclude = array(
".",
"..",
);
$convertExtensions = array('php', 'html', 'htm', 'css', 'csv', 'js', 'txt', 'log');
function GetAllFilesFromDir($dir)
{
global $exclude, $convertExtensions;
if (!file_exists($dir) || in_array($dir, $exclude))
return false;
$struct = scandir($dir);
$result = array();
if (count($struct)>0)
{
foreach($struct as $file)
{
if (is_dir($dir . SEP . $file))
{
if (!in_array($file, $exclude) && !in_array(($dir . SEP . $file), $exclude))
$result = array_merge($result, GetAllFilesFromDir($dir . SEP . $file));
}
else
{
$buf = array();
$buf['src'] = $dir . SEP . $file;
$buf['convert'] = true;
$buf['extension'] = false;
$p = strrpos($file, '.');
if ($p !== false)
$buf['extension'] = strtolower(substr($file, $p+1));
$buf['convert'] = (in_array($buf['extension'], $convertExtensions)) ? true : false;
$result[] = $buf;
}
}
}
return $result;
}
$structure = GetAllFilesFromDir(PATH4CLEAR);
$toConvert = 0;
$nonConvert = 0;
foreach($structure as $file)
{
if ($file['convert'])
$toConvert++;
else
$nonConvert++;
}?>
<h1>В указанной директории всего <?=count($structure)?> файлов.</h1>
<h2>Конвертации подлежат <?=$toConvert?> из <?=count($structure)?> файлов.</h2>
<h2>Без изменений останется <?=$nonConvert?> из <?=count($structure)?> файлов.</h2>
<?
//echo "<pre>"; print_r($structure); echo "</pre>";
$toConvert = 0;
$isConverted = 0;
foreach($structure as $file)
{
if ($file['convert'])
{
$toConvert++;
$content = file_get_contents($file['src']);
$content = iconv('windows-1251', 'UTF-8', $content);
if (file_put_contents($file['src'], $content) !== false)
$isConverted++;
}
}
?>
<h1>Переконвертировано <?=$isConverted?> из <?=$toConvert?> файлов.</h1>
У Дениса хорошее решение, более масштабное (каюсь, читал, но пропустил ссылку на файл ).Задачка была на локальной машине конвертнуть часть файлов. Взял уже готовый скрипт выбора файлов и прикрутил конвертацию.
Пользуюсь программой HTMLChanger (в сети полно). Она как раз позволяет выбрать папку\файлы, направление конвертации и быстро преобразовать. Сама бекапы делает.
Ершов Даниил, если вы просто переносили сайт, без смены кодировки, то ничего конвертировать не надо, проверяйте настройки. Прогоните тест окружения в админке. Если меняли кодироку, то наверное что-то не переконвертировали
Кодировку не менял, раньше сами софт накатывали , теперь решили попробовать WM, и уже не знаем что делать ))) Тесты показывают всё ОК, уже не знаю куда рыть ,,
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».