Mesuti
@Mesuti
Senior HTML developer (c)

Как поправить 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

Проблема в том, что домен может быть разным, в том числе и поддомены так как парсятся разные сайты.
  • Вопрос задан
  • 51 просмотр
Решения вопроса 1
Mesuti
@Mesuti Автор вопроса
Senior HTML developer (c)
Сделал на 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 папки, так что я просто их перечислил у которых нету в начале слеша
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
SaveTime Москва
от 100 000 руб.
Teamlead Ставрополь
от 25 000 до 50 000 руб.
HTML Academy Санкт-Петербург
от 120 000 до 130 000 руб.
22 нояб. 2019, в 18:27
2000 руб./за проект
22 нояб. 2019, в 17:16
200 руб./за проект
22 нояб. 2019, в 17:09
6000 руб./за проект