Это прекрасно выполнимо.
DOMDocument
, возможно, является идеальным (нативным) инструментом для этой задачи, но вы, вероятно, захотите взглянуть на метод DOMDocument::loadHTML()
вместо loadHTMLfile()
.
Чтобы получить обработанную страницу PHP в строку, вы можете запросить страницу с помощью CURL , file_get_contents()
или аналогичной альтернативы. Это включает в себя создание дополнительного запроса и добавление определенной логики управления, чтобы избежать бесконечного цикла.
Лучшей альтернативой может быть использование буферизации вывода , вот простой пример того, как заменить содержимое тега <title>
:
<?php
ob_start();
echo '<title>Original Title</title>';
/* get and delete current buffer && start a new buffer */
if ((($html = ob_get_clean()) !== false) && (ob_start() === true))
{
echo preg_replace('~<title>([^<]*)</title>~i', '<title>NEW TITLE</title>', $html, 1);
}
?>
Я использую preg_replace()
, но у вас не должно возникнуть проблем с его адаптацией для использования DOMDocument
узлов. Также стоит заметить, что вызов ob_start()
должен присутствовать до того, как заголовки / содержимое будут отправлены в браузер, включая сеансовые куки и т. Д.
Это должно помочь вам, дайте мне знать, если вам понадобится дополнительная помощь.
Общий DOMDocument
пример:
<?php
ob_start(); // This must be the very first thing.
echo '<html>'; // Start of HTML.
echo '...'; // Your inputs and so on.
echo '</html>'; // End of HTML.
// Final processing, the $html variable will hold all output so far.
if ((($html = ob_get_clean()) !== false) && (ob_start() === true))
{
$dom = new DOMDocument();
$dom->loadHTML($html); // load the output HTML
/* your specific search and replace logic goes here */
echo $doc->saveHTML(); // output the replaced HTML
}
?>