#php #html #meta-tags
#php #HTML #мета-теги
Вопрос:
У меня возникли проблемы с получением мета-описания / заголовка с этого конкретного сайта.
Вот некоторый код:
$file = file('http://www.thegooddrugsguide.com/lsd/index.htm');
$file = implode("",$file);
if (preg_match('/<title>(.*?)</title>/is',$file,$t)) $title = $t[1];
Это работает с другими сайтами, но не с рассматриваемым сайтом. В чем может быть проблема?
Комментарии:
1. DO. NOT. USE. РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ. ДЛЯ. СИНТАКСИЧЕСКИЙ АНАЛИЗ. HTML.
2. лучше всего использовать DOM api php.net/manual/en/book.dom.php
3. скажи «нет» наркотикам… если нет свободного
Ответ №1:
Это должно работать нормально:
$doc = new DOMDocument;
$doc->loadHTMLFile('http://example.com');
$title = $doc->getElementsByTagName('title');
$title = $title[0];
$metas = $doc->getElementsByTagName('meta');
foreach ($metas as $meta) {
if (strtolower($meta->getAttribute('name')) == 'description') {
$description = $meta->getAttribute('value');
}
}
Дополнительная информация: http://www.php.net/manual/en/book.dom.php
Редактировать: эта сокращенная версия также может помочь найти описание:
$xpath = new DOMXPath($doc);
$description = $xpath->query('//meta[@name="description"]/@content');
Комментарии:
1. Привет, я получаю эту ошибку:
DOMDocument::loadHTMLFile() [domdocument.loadhtmlfile]: Invalid char in CDATA 0x1F in http://www.thegooddrugsguide.com/lsd/index.htm, line: 1
2. Также я пытался example.com и затем я получаю эту ошибку:
Cannot use object of type DOMNodeList as array
3. @johnny только что отредактировал добавление ->item(0)-> nodeValue; вместо [0]. Только что протестировал, и теперь это работает
4. Кто-то снова его изменил (или изменение не было одобрено)… Я напишу это здесь: Вместо
$title = $title[0];
использования$title = $title->item(0)->nodeValue;
5. вы должны сделать
$description = $meta->getAttribute('content');
вместоgetAttribute('value')
Ответ №2:
$url = "http://www.thegooddrugsguide.com/lsd/index.htm";
$tags = get_meta_tags($url);
$description = $tags["description"];