Самый быстрый способ получить <заголовок> в PHP

21
задан Adi 10 September 2012 в 07:37
поделиться

4 ответа

<?php
    function page_title($url) {
        $fp = file_get_contents($url);
        if (!$fp) 
            return null;

        $res = preg_match("/<title>(.*)<\/title>/siU", $fp, $title_matches);
        if (!$res) 
            return null; 

        // Clean up title: remove EOL's and excessive whitespace.
        $title = preg_replace('/\s+/', ' ', $title_matches[1]);
        $title = trim($title);
        return $title;
    }
?>

Дал 'er водоворот на следующем входе:

print page_title("http://www.google.com/");

Произведенный: Google

Надо надеяться, достаточно общий для Вашего использования. При необходимости в чем-то более мощном не могло бы повредить инвестировать немного времени в исследование синтаксических анализаторов HTML.

РЕДАКТИРОВАНИЕ: Добавленный немного проверки ошибок. Отчасти срочно отправленный первая версия, извините.

47
ответ дан 29 November 2019 в 06:15
поделиться

или создание этой простой немного более пуленепробиваемой функции:

function page_title($url) {

    $page = file_get_contents($url);

    if (!$page) return null;

    $matches = array();

    if (preg_match('/<title>(.*?)<\/title>/', $page, $matches)) {
        return $matches[1];
    } else {
        return null;
    }
}


echo page_title('http://google.com');
9
ответ дан 29 November 2019 в 06:15
поделиться

Мне нравится использовать SimpleXml с regex's, это из решения, которое я использую для захвата нескольких заголовков ссылки от страницы в библиотеке OpenID, которую я создал. Я адаптировал его для работы с заголовком (даже при том, что существует обычно только один).

function getTitle($sFile)
{
    $sData = file_get_contents($sFile);

    if(preg_match('/<head.[^>]*>.*<\/head>/is', $sData, $aHead))
    {   
        $sDataHtml = preg_replace('/<(.[^>]*)>/i', strtolower('<$1>'), $aHead[0]);
        $xTitle = simplexml_import_dom(DomDocument::LoadHtml($sDataHtml));

        return (string)$xTitle->head->title;
    }
    return null;
}

echo getTitle('http://stackoverflow.com/questions/399332/fastest-way-to-retrieve-a-title-in-php');

Иронически эта страница имеет "тег заголовка" в теге заголовка, который является тем, что когда-то вызывает проблемы с чистыми regex решениями.

Это решение не идеально как он нижний регистр теги, которые могли вызвать проблему для вложенного тега, если бы форматирование/случай было важно (такие как XML), но существуют пути, которые немного более включены вокруг той проблемы.

1
ответ дан 29 November 2019 в 06:15
поделиться

Regex?

Использование ЗАВИХРЕНИЕ для получения содержания переменной $htmlSource.

preg_match('/<title>(.*)<\/title>/iU', $htmlSource, $titleMatches);

print_r($titleMatches);

видят то, что Вы имеете в том массиве.

Большинство людей говорит для HTML, пересекающего, хотя необходимо использовать синтаксический анализатор, поскольку regexs может быть ненадежным.

другие ответы обеспечивают больше детали :)

5
ответ дан 29 November 2019 в 06:15
поделиться
Другие вопросы по тегам:

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