@ModestesGonze

Как в php заменить содержимое тега body?

Я пытаюсь заменить в файле содержимое тега body другим содержимым.

Сначала я запрашиваю удаленный файл:
$result = file_get_contents('URL');
$arr = json_decode($result, true);
$html = $arr["result"]["html"];


Затем вытаскиваю из него содержимое тега body в переменную $noBody
$d = new DOMDocument;
$mock = new DOMDocument;
$d->loadHTML($h);
$body = $d->getElementsByTagName('body')->item(0);
foreach ($body->childNodes as $child){
    $mock->appendChild($mock->importNode($child, true));
}
$noBody = $mock->saveHTML();


Далее добавляю к нему в начало и в конец шапку с футером.
$data = $header.$noBody.$footer;

Затем создаю файл и пишу в него весь $html из запроса.
Это нужно чтобы на итоговой странице осталось содержимое тега head
$file = "./test.php";
file_put_contents($file, $html);


С тем что описал выше все ок.

Затем пытаюсь заменить содержимое body тем, что в переменной $data
Но этот код не работает.
$filename = './test.php';
$fileNew = file_get_contents($filename);
$title_pattern='#<body>(.*)?</body>#s';
$test= preg_replace($title_pattern, $data, $fileNew);
file_put_contents($filename, $test, FILE_USE_INCLUDE_PATH);

Выводится только $data, без $header и $footer

Если например проверить содержимое переменной $data и записать его в файл, то и $header и $data и $footer вставляются как надо.
$file = "./test.php";
file_put_contents($file, $data);

Но в таком случае JS и стили с удаленого хоста естественно не подгружаются, ибо нет тега head. Поэтому я сначала вставляю весь удаленный исходник и затем пытаюсь заменить в нем body.

Это наверное извращение, но другого способа невижу.
Если коротко, мне нужно подключить удаленый лендинг и вставить в него свои шапки и футер и разместить у себя на хосте.
  • Вопрос задан
  • 173 просмотра
Решения вопроса 1
@ModestesGonze Автор вопроса
Сработала такая регулярка:
"#<body[^>]*>.*?</body>#is"
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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