Самый быстрый способ получить в PHP

Я делаю систему закладок и ищу самый быстрый (самый простой) способ получить название страницы с PHP.

Было бы неплохо иметь что-то вроде $title = page_title($url)

 (.*)<\/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; } ?> 

Возьмем вихрь на следующем входе:

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

Выведено: Google

Надеюсь, достаточно общего для вашего использования. Если вам нужно что-то более мощное, может не помешать потратить немного времени на изучение парсеров HTML.

EDIT: добавлена ​​проверка ошибок. Извините, извините.

Вы можете получить его без выражений reg:

 $title = ''; $dom = new DOMDocument(); if($dom->loadHTMLFile($urlpage)) { $list = $dom->getElementsByTagName("title"); if ($list->length > 0) { $title = $list->item(0)->textContent; } } 

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

 function page_title($url) { $page = file_get_contents($url); if (!$page) return null; $matches = array(); if (preg_match('/(.*?)<\/title>/', $page, $matches)) { return $matches[1]; } else { return null; } } echo page_title('http://google.com'); 

Regex?

Используйте cURL для получения содержимого переменной $ htmlSource.

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

посмотрите, что у вас есть в этом массиве.

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

Другие ответы дают более подробную информацию 🙂

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

 function getTitle($sFile) { $sData = file_get_contents($sFile); if(preg_match('/]*>.*<\/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.

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

Функция для обработки тегов заголовков, у которых есть атрибуты, добавленные к ним

 function get_title($html) { preg_match("//siU", $html, $matches); if( !empty( $matches[1] ) ) { $title = $matches[1]; if( strstr($title, '>') ) { $title = explode( '>', $title, 2 ); $title = $title[1]; return trim($title); } } } $html = 'jemima'; $title = get_title($html); echo $title;