Нахождение ссылки href с простым домом

Я просто использую, чтобы получить 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-адрес сайта?! Как?

2 ответа

Решение

В основном вам нужно проверить, является ли элемент 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: stripcslashes

Другие вопросы по тегам