Вопрос

Я простой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:полоски ресниц

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top