Проблема с перекодировщиком iconv windows-1251-->KOI8-R

Статус
В этой теме нельзя размещать новые ответы.

farm

Постоялец
Регистрация
7 Июн 2006
Сообщения
536
Реакции
115
Имеется директория с папками в которых html файлы. Нужно сменить кодировку с windows-1251 на KOI8-R. Нашел скрипт под это дело, все работает но некоторые(не все) файлы он бьет, т.е сохраняет половину файла. Ниже исходник
PHP:
<?php
   ini_set('display_errors', TRUE);
 @ini_set('memory_limit', '64M');
 @set_time_limit(0);
 @ini_set('max_execution_time',0);
 @ini_set('set_time_limit',0);
function convert($directory){ 
 
    if(is_dir($directory)){ 
        $direc = opendir($directory); 
        while(false !== ($file = readdir($direc))){ 
 
            if($file !="." && $file != ".."){ 
 
                if(is_file($directory."/".$file)){ 
 
                    $filename = explode(".",$file); 
 
                    if ($filename[1] === "html" || $filename[1] === "php" || $filename[1] === "txt") { 
 
                        $text = file_get_contents($directory."/".$file); 
                        $text = iconv("windows-1251", "KOI8-R", $text); 
                        file_put_contents($directory."/".$file, $text);                 
 
                        echo $file . " ....... ok<br>"; 
 
                    } 
 
 
                } else if(is_dir($directory."/".$file)){ 
 
                    convert($directory."/".$file); 
 
                } 
 
            } 
        } 
        closedir($direc); 
    } 
 
    return ; 
} 
 
convert("convert"); 
?>

В чем может быть проблема? Юзаю на денвере
 
попробуй вместо
PHP:
file_put_contents($directory."/".$file, $text);
использовать
PHP:
$handler = fopen($directory."/".$file, "w+");
fwrite($handler, $text);
fclose($handler);
 
В чем может быть проблема?
PHP:
error_reporting(E_ALL);
ini_set('display_errors',1);
[telepat mode]
В отсутствии символа из одной кодировки в другой. Лекарства искать в мануале по iconv.
[/telepat mode]
 
  • Нравится
Реакции: farm
Включил отображение ошибок, вот что вывалилось
Notice: iconv() [function.iconv]: Detected an illegal character in input string in Z:\home\site.ru\WWW\koi-8.php on line 23

Покурил гугл с яндексом, но как поправить это так и не нашел.
 
$text = iconv("CP1251", "KOI8-R", $text);
Нет такой кодировки windows-1251
 
studentpm, под виндой (выше было сказано про денвер) - есть :) Опять же текст сообщения об ошибке был бы другим - Wrong charset, да и файлы бы наполовину не сохранялись.
 
Вообщем достаточно было вставить //IGNORE, и все стало нормально работать:)
PHP:
$text = iconv("windows-1251", "KOI8-R//IGNORE", $text);
 
Нет такой кодировки windows-1251
Есть, и не только в винде - iconv прекрасно понимает её и под никсами.

Ошибка в том, что попадается файл в кодировке, отличной от указанной в вызове iconv.
//IGNORE - не панацея.

По теме - Для просмотра ссылки Войди или Зарегистрируйся
 
  • Нравится
Реакции: farm
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху