Нахождение ссылки 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