Проблема с перекодировщиком iconv windows-1251-->KOI8-R
Код:
<?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");
?>
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");
?>
Включил отображение ошибок, вот что вывалилось
Код:
Notice: iconv() [function.iconv]: Detected an illegal character in input string in Z:\home\site.ru\WWW\koi-8.php on line 23
Ну вот он и пишет что обнаружен символ который он не знает как перекодировать. Был флаг у iconv который позволял такие символы пропускать. Смотрите в справке или исходниках iconv
Код:
$text = iconv("windows-1251", "KOI8-R//IGNORE", $text);
тот самый флаг
вот строка, в которой я пытаюсь преобразовать фразу РОМ (написано кириллическими символами) из кодировки utf-8 в cp1251.
echo(iconv("UTF-8", "windows-1251//IGNORE", "РОМ")."___<br>");
на экран ничего не выводится, кроме ___
сам браузер настроен на кодировку utf-8 , если это важно.
подскажите пожалуйста в чем проблема?
У тебя скрипт точно в UTF-8 сохранён? По умолчанию большинство редакторов используют ANSI, поэтому входная строка у тебя тоже в ANSI будет, а не в UTF-8.
но дело в том, что раньше я в этом скрипте использовал точно эту же функцию и работал с mysql. получалось так, что в mysql я отправлял фразы в cp1251(другие он просто не принимал, так каодировка базы cp1251).
сейчас же я решил переити с mysql на oracle. там кодировка базы тоже cp1251(записывается немного по другому конечно же). и тот же самый скрипт не работает... почему такое происходит?...
И кстати все равно не работает. на экран запрос выводится. с экрана копирую, выполняю в самом oracle - результирующий набор получаю. если делаю то же самое через пхп, то на экран выводятся все названия, а не тольео те, в которых присутствует фраза РОМ