Возможный дубликат:
Как анализировать и обрабатывать HTML с помощью PHP?
Я довольно новичок в PHP. У меня есть текст тега body на какой-либо странице в строковой переменной. Я хотел бы знать, содержит ли он какой-то тег … где указано имя тега tag1, и если это так, возьмите только этот тег из строки. Как я могу сделать это просто на PHP?
Благодаря!!
Вы бы посмотрели на что-то вроде этого:
<?php $content = ""; $doc = new DOMDocument(); $doc->load("example.html"); $items = $doc->getElementsByTagName('tag1'); if(count($items) > 0) //Only if tag1 items are found { foreach ($items as $tag1) { // Do something with $tag1->nodeValue and save your modifications $content .= $tag1->nodeValue; } } else { $content = $doc->saveHTML(); } echo $content; ?>
DomDocument представляет собой полный HTML или XML-документ; служит корнем дерева документов. Таким образом, у вас будет действительная разметка, и, найдя элементы по имени тега, вы не найдете комментариев.
Другая возможность – регулярное выражение.
$matches = null; $returnValue = preg_match_all('#<li.*?>(.*?)</li>#', 'abc', $matches);
$matches[0][x]
содержит все совпадения, такие как <li class="small">list entry</li>
, $matches[1][x]
содержат только внутренний HTML, такой как list entry
.
Быстрый путь:
Посмотрите на позицию индекса tag1, затем найдите позицию индекса / tag1. Затем отрежьте строку между этими двумя индексами. Посмотрите strpos и substr на php.net. Возможно, это не сработает, если ваша строка слишком длинная.
$pos1 = strpos($bigString, '<tag1>'); $pos2 = strpos($bigString, '</tag1>'); $resultingString = substr($bigString, -$pos1, $pos2);
Возможно, вам придется добавить и / или вычесть некоторые единицы из $ pos1 и $ pos2, чтобы получить правду result result. (если у вас нет комментариев с tag1 внутри них, вздох )
Правильный путь:
Поиск html-парсеров