За последние 24 часа нас посетили 22922 программиста и 1261 робот. Сейчас ищут 700 программистов ...

Привет. Вопрос по cURL. Получение кода страницы в строку.

Тема в разделе "PHP для профи", создана пользователем Виталий-82, 11 авг 2018.

  1. Виталий-82

    Виталий-82 Новичок

    С нами с:
    25 окт 2016
    Сообщения:
    9
    Симпатии:
    0
    Здравствуйте (т.е. будьте здоровы)).

    Вопрос такой. Есть функция возвращающая код страницы:

    Код (Text):
    1. function get_web_page( $url )
    2. {
    3.  
    4.   $ch = curl_init( $url );
    5.  
    6.   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   // возвращает веб-страницу
    7.   curl_setopt($ch, CURLOPT_HEADER, 0);           // не возвращает заголовки
    8.   curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);   // переходит по редиректам
    9.   curl_setopt($ch, CURLOPT_ENCODING, "");        // обрабатывает все кодировки
    10.   curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // таймаут соединения
    11.   curl_setopt($ch, CURLOPT_TIMEOUT, 120);        // таймаут ответа
    12.   curl_setopt($ch, CURLOPT_MAXREDIRS, 10);       // останавливаться после 10-ого редиректа (не много ли!?)
    13.  
    14.   $content = curl_exec( $ch );
    15.   $err     = curl_errno( $ch );
    16.   $errmsg  = curl_error( $ch );
    17.   $header  = curl_getinfo( $ch );
    18.   curl_close( $ch );
    19.  
    20.   $header['errno']   = $err;
    21.   $header['errmsg']  = $errmsg;
    22.   $header['content'] = $content;
    23.   return $header;
    24. }
    25.  
    26. $url = 'google.com';
    27. $data = get_web_page($url); // загружаем результат с помощью нашей функции
    28.  
    29. echo $data['content']; //выводит страницу на экран
    30. echo htmlspecialchars($data['content']); //выводит код страницы на экран
    В случае, когда мы используем ссылку - google.com, все в порядке, выводятся оба echo. При этом:
    Код (Text):
    1. echo strlen($data['content']); //46500
    2. echo strlen(htmlspecialchars($data['content'])); // 51243

    Если же я меняю ссылку google.com на google.ru, то первый echo $data['content']; - срабатывает как положено и выводит страницу, но стоит вывести строку echo htmlspecialchars($data['content']); - и ничего не происходит, а strlen(htmlspecialchars($data['content'])) - равен нулю.
    Код (Text):
    1. echo strlen($data['content']); //46500
    2. echo strlen(htmlspecialchars($data['content'])); // 0
    В чем же дело?)
     
  2. oolleegg55

    oolleegg55 Активный пользователь

    С нами с:
    13 май 2014
    Сообщения:
    24
    Симпатии:
    3
    Мне кажется, стоит заглянуть в логи. Есть там ошибки?
     
  3. Kvandaik

    Kvandaik Новичок

    С нами с:
    5 июл 2018
    Сообщения:
    121
    Симпатии:
    1
    редиректит?
     
  4. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    @Виталий-82, передайте третьим параметром функции htmlspecialchars(), например, 'UTF-8'.