Замена относительных ссылок в тексте html на абсолютные

Статус
В этой теме нельзя размещать новые ответы.

nexus-invest

Создатель
Регистрация
18 Сен 2008
Сообщения
25
Реакции
3
Здравствуйте!
Имеется база данных, в которой хранится html текст, который содержит относительные ссылки!
Так вот, как сделать так, чтобы все эти отностительные ссылки заменить на абсолютные?!!
Пробовал так
PHP:
$domain = 'http://test.ru';
$data = preg_replace('#<img src\=([a-zA-Z\.\/\-\_]+)>#', "<img src=$domain/\\1>", $data);
Но что-то не получается! Помогите разобраться!
Уж больно не хочется вручную все править!!!!:)
 
Не надо экранировать символы внутри квадратных скобок.
Или я уже туплю в конце рабочего дня...
 
PHP:
	function _expandlinks($links,$URI)
	{
		
		preg_match("/^[^\?]+/",$URI,$match);

		$match = preg_replace("|/[^\/\.]+\.[^\/\.]+$|","",$match[0]);
		$match = preg_replace("|/$|","",$match);
		$match_part = parse_url($match);
		$match_root =
		$match_part["scheme"]."://".$match_part["host"];
				
		$search = array( 	"|^http://".preg_quote($this->host)."|i",
							"|^(\/)|i",
							"|^(?!http://)(?!mailto:)|i",
							"|/\./|",
							"|/[^\/]+/\.\./|"
						);
						
		$replace = array(	"",
							$match_root."/",
							$match."/",
							"/",
							"/"
						);			
				
		$expandedLinks = preg_replace($search,$replace,$links);

		return $expandedLinks;
	}
 
Прошу прощения! Но не могли бы Вы рассказать, как работает эта функция! А то я в регулярных выражениях, мягко говоря, не силен!!!:)

Какие параметры необходимо передать этой функции?!
 
Первый параметр - ссылка или массив ссылок, которые надо преобразовать к абсолютным. Второй параметр - это абсолютный урл, относительно которого те самые ссылки являются относительными.

Т.е. ссылка вида '../file.txt' относительно урла 'http://site.com/data/links.htm' преобразуется в 'http://site.com/file.txt'
Надеюсь, понятно.

Там в коде еще затесался $this->host. Замени его там на что-то вменяемое. По смыслу это должен быть
PHP:
  $arr = parse_url($URI);
  $this_host = $arr['host'];
 
А может проще?
PHP:
$html=str_replace('<img src="','<img src="http://domain.com',$html);
 
Можно и проще, но ссылки бывают трех видов: от корня, от текущего места, и от Для просмотра ссылки Войди или Зарегистрируйся И если ко всем из них дописать в начало Для просмотра ссылки Войди или Зарегистрируйся - будет лажа. Типа такой: <img src="http://domain.comhttp://youtube.com/yimg/0232143.jpg">

И как правило на одной и той же странице часть картинок с "полными" урлами, а часть - с относительными.
 
Можно и проще, но ссылки бывают трех видов: от корня, от текущего места, и от Для просмотра ссылки Войди или Зарегистрируйся И если ко всем из них дописать в начало Для просмотра ссылки Войди или Зарегистрируйся - будет лажа. Типа такой: <img src="http://domain.comhttp://youtube.com/yimg/0232143.jpg">

И как правило на одной и той же странице часть картинок с "полными" урлами, а часть - с относительными.

если ссылка с http:// то она и так абсолютная, а если будет от корня тогда перед ссылкой будет /, вообщем, код сообщением выше можно доделать так:
PHP:
$address = 'src="http://hahahaha"';

if(  stristr( $address, 'src="http://') === FALSE )

	if( stristr( $address, 'src="/') !== FALSE )
	{
		$address = str_replace('src="/', 'src="http://site.ru/', $address);
	}
	else
	{
		$address = str_replace('src="', 'src="http://site.ru/', $address);
	}
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху