@vgrayster

Замена всех внешних ссылок через редирект

Добрый день.

Есть задача сделать php фильтр, который на вход получает html страницу а на выходе выдает туже самую страницу, но все внешние ссылки меняются на /away.php?url=blabla

Сама по себе задача не сложная, я через preg_replace это быстро сделаю, но у preg_ есть лимит в 100K, если текст больше этого лимита то функции не работают, можно конечно поднять лимит. но хочется чего-то более гибкого.

Какие я вижу варианты
1) Разбирать в DOM дерево и там менять, но тогда Не валидные документы не будут обрабатываться

2) Разбивать текст на куски меньше 100к и там менять, вопрос в том как разбить текст, чтобы граница не прошла по середине ссылки

3) Анализировать по каждой сточке, имхо тоже не лучший вариант.

Есть идеи?
  • Вопрос задан
  • 2632 просмотра
Пригласить эксперта
Ответы на вопрос 1
Wott
@Wott
Конечно криво, но
preg_match или preg_match_all с флогом на сохранение смещения найденного
меняем через str_replace
цикл на следующий слайс с места последнего смещения
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы