За последние 24 часа нас посетили 55284 программиста и 1635 роботов. Сейчас ищут 1129 программистов ...

После перехода на php7 iconv преобразует в кроказябры, почему?

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

  1. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    Добрый день. Есть функция которая считывает pdf документы из папки и выводит их название. После перехода на php7 вместо названии выводить кроказябры. Название документов на русском языке.
    Вот эта функция:
    PHP:
    1. public function createPDF(){
    2.    $dir = 'inc/pdfdocument';
    3.    $files = scandir($dir);
    4.    $result = "";
    5.    $con1 = '<div class="container"><div class="row">';
    6.    $con2 = '</div></div>';
    7.    foreach ($files as $file):
    8.        if(preg_match('/\.(pdf)/', $file)){
    9.        $result .= '<div class="col-4 shadow-lg p-3 mb-5 rounded directive-block" >'.iconv('windows-1251', 'UTF-8', $file).'</div>';
    10.         }
    11.     endforeach;
    12.  
    13.     return $con1.$result.$con2;
    14. }
    Подскажите что отрабатывает не так?
     
  2. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    ini_get('default_charset') ?
     
  3. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    UTF-8
     
  4. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @Artur_hopf, под управлением какой операционной системы крутится сервер?
     
  5. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
  6. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    @nospiou Спасибо, заработало :)
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.815
    Симпатии:
    1.332
    Адрес:
    Лень
    PHP:
    1. if ( substr ( $file, -4 ) == '.pdf' ) {
     
  8. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    PHP:
    1. if (pathinfo($file) ['extension'] == 'pdf') {
     
    MouseZver нравится это.
  9. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.815
    Симпатии:
    1.332
    Адрес:
    Лень
    @Fell-x27 по спичкам substr выйграет
     
  10. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @Fell-x27 теоретически так быстрее
    Код (Text):
    1. pathinfo($file, PATHINFO_EXTENSION)
     
  11. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Быстрее не быстрее, тут вопрос пары наносекунд, но твой вариант правильнее, да. Я забыл про второй аргумент.

    А по удобству, универсальности, поддерживаемости? То-то и оно.
     
  12. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.815
    Симпатии:
    1.332
    Адрес:
    Лень
    у обоих равно.
    Не согласен. В чем универсал, если в коде нужно единственным образом достать последние 3 - 4 символа и проверить пдф или нет ?
    По факту что и второй пункт, у нас конкретика с данными. Что и кодировку учитывать можно и опустить
     
  13. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    В том, что ты просто пишешь pathinfo != "ext", и эта запись не меняется в зависимости от расширения, только расширение. Не надо считать циферки, городить города, можно вообще оформить это как отдельную функцию, чтобы количество кода чуть сократить, и не париться с вычислениями длинн.

    Тут все просто - если для какго-то действия есть нативная функция - USE IT.