Mesuti
@Mesuti
Хороший код в программистах не нуждается.

Как поправить href и src у относительных путей в спарсенной странице?

Парсю страницу донора:
$content = file_get_contents('https://donor.ru/questionversion/new?question_id=682520');

Получаю строку с содержимым:
<div class="content">

       <link rel="stylesheet" href="/assets/css/style.css">
       <link rel="stylesheet" href="https://donor.ru/assets/css/style.css">

        <img src="/assets/img/img.png">
        <img src="https://donor.ru/assets/img/img.png">

        <script src="/assets/js/script.js"></script>
        <script src="https://donor.ru/assets/js/script.js"></script>

 </div>


Как можно поправить относительные пути, чтобы грузились с того же сайта?
*без библиотек парсинга

На целевом сайте относительные пути остаются и выдают 404
https://target.ru/target-page/assets/js/script.js 404

Проблема в том, что домен может быть разным, в том числе и поддомены так как парсятся разные сайты.
  • Вопрос задан
  • 52 просмотра
Решения вопроса 1
Mesuti
@Mesuti Автор вопроса
Хороший код в программистах не нуждается.
Сделал на JavaScript замену всех url у ресурсов
document.getElementById('button').addEventListener('click', function() {
        var allHref = document.querySelectorAll("[href]");  // берем все el с href
        var allSrc = document.querySelectorAll("[src]"); // берем все el с src

        allHref.forEach((href) => {
        // замена href на новый href тавтология href href =) 
            href.href =   href.href.replace('http://target.ru/test/', 'https://donor.ru/')  
        });

        allSrc.forEach((src) => {
           // замена src на новый src. тавтология src src =) 
           src.src =  src.src.replace('http://target.ru/test/', 'https://donor.ru/')  
        })
});


После замены и загрузки ресурсов в css шрифты и картинки начинают выдавать ошибки CORS.

Мой вердикт - без библиотеки парсинга и трудоемкой работы, запрещенный к iframe контент у себя на сайте не опубликовать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
FeST1VaL
@FeST1VaL
Тихий
Только что делал загрузку шаблона тильды с изменением путей, подправишь под себя немного

$content = file_get_contents($folder.'/index.html');
$content = preg_replace('/([^\/])(css|files|images|js)\//', '$1/files/tilda/project/$2/', $content);


По сути я просто заранее знал что у меня только 4 папки, так что я просто их перечислил у которых нету в начале слеша
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы