Как улучшить php функцию для получения Title удаленной страницы?

Такой скрипт:
function titleLink($url) {
    //проверяем, если кириллический домен, то конвертируем его
    if (preg_match('/[а-яА-Я]/', $url)) {
      require_once('modules/idna_convert.class.php');
      $convert=new idna_convert();
      $url=$convert->encode($url);
    }
    $title="";
    //получаем удаленную страницу
    @$page=file_get_contents($url); 
    if ($page) {
      //находим и выдираем титул
      if (eregi("<title>(.*)</title>", $page, $out)) {
        $title=$out[1];
       //проверяем кодировку, если windows-1251 то конвертируем в utf-8
        if (mb_check_encoding($title, 'Windows-1251') && !mb_check_encoding($title, 'UTF-8')) {
          $title=iconv("CP1251//IGNORE", "UTF-8", $title);
        }
      }
    }
    return $title;
  }

Результат получаю где-то в 75% запросов. Причем титул бывает не удается получить с самых обычных среднестатистических страницах и даже например, на второй и третьей страницы получил титул, а на четвертой не получил, с одного сайта.
Как можно улучшить работу скрипта, для более успешного парсинга?
  • Вопрос задан
  • 3780 просмотров
Решения вопроса 1
@IceJOKER
Web/Android developer
в одном месте mb_ в другом iconv - может быть стоит все-таки пользоваться mb_?
в одном месте preg_match() в другом eregi, да вы издеваетесь :D
mb_convert_encoding($title, 'utf-8'); //он сам определит кодировку .

preg_match('~(.*?)~iu'); //i-регистронезависимый поиск, u-для utf-8 кодировки

<?php
function getTitle($url) {
    if(!$url) return ;
	$url = 'http://'.parse_url($url, PHP_URL_HOST);
	//проверяем, если кириллический домен, то конвертируем его
    if (preg_match('/[а-яА-Я]/i', $url)) {
      require_once('modules/idna_convert.class.php');
      $convert=new idna_convert();
      $url=$convert->encode($url);
    }
    $title="";
    //получаем удаленную страницу
    @$page=file_get_contents($url); 
    if ($page) {
      //находим и выдираем титул
      if (preg_match("~<title>(.*?)</title>~iu", $page, $out)) {
        $title=$out[1];
       //конвертируем в utf-8
        mb_convert_encoding($title, 'utf8');
      }
    }
    return $title;
  }
echo getTitle('http://toster.ru/q/траляля');

?>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы