Поиск ссылок href с помощью простого dom
Вопрос
Я простойphpdom используя, чтобы получить a
href связывает значения с помощью этого кода:
$html = file_get_html($url);
foreach($html->find('a') as $element) $array[] = $element->href . '<br>';
Проблема в том, что если ссылка начинается с косой черты (/), она будет недействительна!
Как я могу получить действительные ссылки?
Например, ссылка такая:
<a href="/news45454.html">Test link</a>
если я использую код phpsimpledom, у меня будет:
/news45454.html
Но я хочу иметь:
http://example.com/news45454.html
Как это получить?
Можем ли мы проверить, начинается ли ссылка с косой черты, а затем добавить к ней URL-адрес сайта?!Как ?
Решение
По сути, вам нужно проверить, является ли элемент HREF действительным полным URL-адресом.Если проверка пройдена, вы можете добавить его в массив.Однако если проверка не удалась, вам необходимо объединить базовое имя (которое должно быть доменом веб-сайта).
$html = file_get_html($url);
foreach($html->find('a') as $element) {
if(filter_var($url, FILTER_VALIDATE_URL)) {
// Valid URL, add to array.
$array[] = $element->href . '<br>';
} else {
// URL is invalid, add basename.
$array[] = basename($url) . $element->href . '<br>';
}
}
Для других случаев может потребоваться небольшая настройка (например, <a href="#">
), но это должно работать для описанной вами ситуации.
Другие советы
Чтобы удалить косую черту, используйте:
string stripcslashes ( string $str )
Также см. Руководство по PHP:полоски ресниц