[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Распознать внутреннюю ссылку
zhenia3003
Как с помощью регулярных выражений или с помощью DOM распознать внутреннюю ссылку и добавить домен сайта в начале??
Пример ссылок:
http://site.ru
/blog/98932/
http://site.ru/page.php?id=723
page/gallery/2323.html
Arh
<?php

$text = '
<a href="/blog/98932/">Ссылка 1</a>
<a href="http://site.ru/page.php?id=723">Ссылка 2</a>
<a href="page/gallery/2323.html">Ссылка 3</a>
'
;

$text = preg_replace('#href="(http://site\.ru/|/)?(.*?)"#', 'href="http://site.ru/$2"', $text);
echo $text;


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
killer8080
Цитата (zhenia3003 @ 25.02.2017 - 04:57)
Как с помощью регулярных выражений или с помощью DOM распознать внутреннюю ссылку и добавить домен сайта в начале??

уточни вопрос, что за ссылки? Это действительно ссылки вида <a href... или просто урл в тексте? На какой стороне решается задача? На стороне сервера или браузера?

Arh
Цитата (Arh @ 25.02.2017 - 12:11)
$text = preg_replace('#href="(http://site\.ru/|/)?(.*?)"#', 'href="http://site.ru/$2"', $text);

решение возможно не корректное, ссылка page/gallery/2323.html - относительная, её нельзя преобразовывать в абсолютную не зная базовый урл.
zhenia3003
Сделал такой вариант, т.е. через parse_url смотрю, есть ли хост, если нет - ссылка внутренняя. 100-%-ли хорош такой вариант?

num('http://site.ru');
function num($site){
$arr = parse_url($site);
$html = file_get_contents($site);
$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'utf-8');
$dom = new DOMDocument();
@$dom->loadHTML($html);
$tegi = $dom->getElementsByTagName("a");
foreach ($tegi as $teg) {
$has_a = $teg->hasAttribute('href');
$get_a = $teg->getAttribute('href');
$arr_get = parse_url($get_a);
//Если существует ссылка и ссылка больше 3 символов
if($has_a && strlen($get_a) > 3){
if(!$arr_get['scheme'] && !$arr_get['host']){
echo $arr['scheme']."://".$arr['host'].$get_a."<br>";
}else if(!$arr_get['host']){
echo $arr['host'].$get_a."<br>";
}else{
echo $get_a."<br>";
}
}
}
}

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.