Манипулировать HTML из php

У меня есть html-файл, index.php Я хочу взять содержимое в <div> с main классом этого файла и заменить его другим текстом. Как я могу это достичь?

Пример содержимого в html:

 <div class="main"> Replace this text with some code! </div> 

Я хочу получить содержимое в этом div с помощью php и заменить его другим контентом. Но я не знаю, как это сделать.

Обновление: я знаю, что клиентский трюк с javascript. Я хочу сделать эту серверную часть. И файл будет html, а не php. поэтому я думаю, что мне нужно открыть html в php и сделать это, хотя я точно не знаю.

Можно ли это сделать с помощью парсера xpath или html dom или что-то еще? Поиск Google дал мне эти условия, но я понятия не имею, что они на самом деле.

Для этого вы можете использовать классы / функции PHP DOM .

Начните с создания / загрузки документа:

 $d = new DOMDocument(); $d->loadHTML($yourWellFormedHTMLString); 

Затем вам захочется найти узел документа, который вы хотите изменить. Вы можете сделать это с помощью XPath:

 $xpathsearch = new DOMXPath($d); $nodes = $xpathsearch->query('//div[contains(@class,'main')]'); 

Затем вы захотите перебрать соответствующие узлы и создать новые узлы внутри:

 foreach($nodes as $node) { $newnode = $d->createDocumentFragment(); $newnode->appendXML($yourCodeYouWantToFillIn); $node->appendChild($newnode); } 

Если вы не против возиться с библиотекой на ранней стадии разработки, взгляните на CAST (шаблоны стилей, ориентированные на контент). Это в значительной степени предназначено для того, чтобы делать то, что вы описываете, и, если ничего другого, вы могли бы заглянуть внутрь источника, чтобы увидеть примеры.

(ПРИМЕЧАНИЕ. Я уверен, что проницательный заметит, что //div[contains(@class,'main')] не является точно эквивалентом селектора CSS div.main … поскольку атрибут класса может содержать больше, чем один класс. Выполнение этого точно достаточно громоздко, я думаю, что лучше начать с упрощенного выражения, когда вы вводите в него людей, даже если это может быть лучше для тех, кто идет по этому маршруту, чтобы в конечном итоге узнать xpath достаточно хорошо, чтобы справиться с этим или просто используйте ids больше вместо классов. 🙂

Если нужно просто включить статический фрагмент

 <div class="main"> <?php readfile ('path/to/some/file'); ?> </div> 

Если ему нужно включить вывод другого скрипта PHP

 <div class="main"> <?php include ('path/to/some/file') ?> </div> 

Вы читаете файл:

 $fileContents=file_get_contents($file_path); 

http://php.net/manual/en/function.file-get-contents.php

Затем вы выполняете поиск и замену содержимого div:

 $newHtmlContent=preg_replace("/<div class=\"main\">(.*)</div>/i",'<div class="main">Some text here</div>',$fileContents); 

http://php.net/manual/en/function.preg-replace.php

Мое регулярное выражение немного ржавое, но вы можете его зачерпнуть здесь: http://www.regular-expressions.info/tutorial.html

Затем сохраните новый контент:

 file_put_contents($file_path,$newHtmlContent); 

http://www.php.net/manual/en/function.file-put-contents.php

Или вы можете проанализировать файл, используя это: http://simplehtmldom.sourceforge.net/ Но он должен быть хорошо сформирован.

Я бы порекомендовал эту версию, потому что вышеописанное не сработает, если основной элемент div – другой div …