За последние 24 часа нас посетили 18920 программистов и 1640 роботов. Сейчас ищут 968 программистов ...

skandir не отображаются русские символы

Тема в разделе "PHP для новичков", создана пользователем Dimon2x, 2 янв 2018.

  1. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    Как исправить? Пробовал по всякому.

    PHP:
    1. <?php
    2. header('Content-type: text/html; charset=utf-8');
    3.  
    4. $papka = iconv('UTF-8', 'ISO-8859-1//TRANSLIT', 'test');
    5. echo '<pre>';
    6.     print_r(scandir($papka));
    7. echo '</pre>';
    PHP:
    1. <?php
    2. header('Content-type: text/html; charset=utf-8');
    3.  
    4. $papka = iconv("CP1251", "UTF-8", 'test');
    5.  
    6. echo '<pre>';
    7.     print_r(scandir($papka));
    8. echo '</pre>';
    PHP:
    1. $papka = mb_convert_encoding('test', "utf-8", "Windows-1251");
    2. echo '<pre>';
    3.     print_r(scandir($papka));
    4. echo '</pre>';
     
    #1 Dimon2x, 2 янв 2018
    Последнее редактирование: 2 янв 2018
  2. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    Нашёл решение, работает с амперсандом

    PHP:
    1. setlocale(LC_ALL,'ru_RU.UTF-8');
    2.  
    3. $files = scandir('test');
    4.  
    5. foreach($files as&$file){// обрати внимание на амперсанд
    6.     $file = iconv("windows-1251","UTF-8", $file);
    7. }
    8.  
    9. echo '<pre>'. print_r($files,True).'</pre>';
     
  3. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    Вот так ещё работает

    PHP:
    1. $files = scandir('test');
    2.  
    3. foreach($files as $file) {
    4.    
    5.     echo iconv("windows-1251", "UTF-8", $file) . '<br>';
    6.  
    7. }
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    без iconv можно
    PHP:
    1. function ищем_привет( string $dir )
    2. {
    3.     $g = glob ( "{$dir}/*" );
    4.    
    5.     foreach ( $g AS $a )
    6.     {
    7.         if ( is_dir ( $a ) )
    8.         {
    9.             return ищем_привет( $a ) . PHP_EOL;
    10.         }
    11.         else
    12.         {
    13.             return $a;
    14.         }
    15.     }
    16. }
    17.  
    18. echo ищем_привет( 'test' );
     
  5. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
  7. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    @MouseZver вау! Круто! А что он делает? В контексте данной задачи
     
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    выполняет свою работу ;)
     
  9. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    @Ganzal но как он это делает?
     
  10. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    @Dimon2x, дело типа на винде происходит? Потому что на лине встречал подобный глюк при использовании Apache, но там это не так решалось, настройкой апача
     
  11. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186