Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Кракозябры в названии файлов


Автор: Finder128 1.9.2010, 18:39
Суть проблемы в следующем. Имеются веб-страницы с кодировкой utf-8, лежащие в локальной папке. Их необходимо запарсить. Парсингом занимаются два скрипта: основной и подключаемый через require,  содержащий функции, к которым обращается основной скрипт. Скрипты также имеют кодировку utf-8. Так вот содержимое страниц отображается правильно, а названия страниц предстаёт в виде каких-то иероглифов. Установливаю в парсящих скриптах кодировку cp-1251 и названия страниц отображаются правильно, но зато не парсятся страницы. Как быть?

Автор: bars80080 1.9.2010, 20:15
а что такое "названия страниц"? откуда считывается сей параметр?

Автор: Finder128 1.9.2010, 21:42
Имеется в виду адрес на локальной машине. Объясню подробно. Есть папка "Украина" лежащая в www, то есть доступ к ней через localhost. В этой папке - подпапки с названиями областей Украины, в каждой веб-страницы скопированные с википедии, содержат информацию о районах Украины. Названия веб-страниц вида: такой-то район такой-то области. 
Короче, вот код:
Код

require("functions.php");

set_time_limit(300);
 //$d=dir();



$root="Украина";

if ($handle = opendir($root)) {
     //for($u=11;$u<841;$u=$u+10){
   while (false !== ($file = readdir($handle))) {
    //$link="$link/$file";
        echo "file $file <br>";
        $res=check_files($file);

               if($res==0){

                  $address="$root/$file";

                $files= get_dir($address);

                foreach($files as $element){

                $res2=check_files($element);
                //echo "$address $element <br>";
                     if(strstr($element,".htm")<>""){
                         $buffer="$address/$element";
                         echo "$buffer <br>";
                          $content=file_get_contents($buffer);
                             get_wiki($content);
                         }

                /*



                         */


                        }


                        }
    //$file="$u.htm";



       }

   closedir($handle);
//}
  }


Функция get_wiki
Код

  $p1=strpos($object,"Страна");
                                                           $p2=strpos($object,"Часовой пояс");
                                                           echo "p1 - $p1 <br>";
                                                           $length=$p2-$p1;
                                                           $string=substr($object,$p1,$length);
                                                           $pattern="/<P>.*?</";

                                                           $res=preg_match_all($pattern,$string,$matches);
                                                           $count=0;
                                                           foreach($matches[0] as $element){
                                                           echo "$element <br>";
                                                           //if(strstr($element,"место")<>""){
                                                           //echo "$element <br>";
                                                           //if(strstr($element,"км")<>""){
                                                             $pattern="/\d+\s\d+/";
                                                                 $res=preg_match_all($pattern,$element,$matches2);

                                                                 foreach($matches2[0] as $object){
                                                                 echo "$object <br>";

                                                                 }

                                                                 //echo "population - ".$matches[0][0]."<br>";

                                                                 //}

                                                           //echo "res $res <br>";






                                                           }
                                                           //echo "data - $territory $population <br>";

                                        }


Автор: bars80080 1.9.2010, 23:20
честно говоря, не видно, чтобы что-то где-то записывалось, но вполне очевидно, что если вы работаете в UTF-8, вплоть до всех операций в скриптах, то адреса папок и файлов будут также сохраняться в этой кодировке, что из-под винды будет выглядеть только кракозябрами. там где формируется адрес добавьте его преобразование с помощью функции iconv() и всё

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)