Есть задача сделать php фильтр, который на вход получает html страницу а на выходе выдает туже самую страницу, но все внешние ссылки меняются на /away.php?url=blabla
Сама по себе задача не сложная, я через preg_replace это быстро сделаю, но у preg_ есть лимит в 100K, если текст больше этого лимита то функции не работают, можно конечно поднять лимит. но хочется чего-то более гибкого.
Какие я вижу варианты
1) Разбирать в DOM дерево и там менять, но тогда Не валидные документы не будут обрабатываться
2) Разбивать текст на куски меньше 100к и там менять, вопрос в том как разбить текст, чтобы граница не прошла по середине ссылки
3) Анализировать по каждой сточке, имхо тоже не лучший вариант.
Конечно криво, но
preg_match или preg_match_all с флогом на сохранение смещения найденного
меняем через str_replace
цикл на следующий слайс с места последнего смещения