Как я могу заменить этот <p><span class="headline">
этим <p class="headline"><span>
проще всего с PHP.
$data = file_get_contents("http://www.ihr-apotheker.de/cs1.html"); $clean1 = strstr($data, '<p>'); $str = preg_replace('#(<a.*>).*?(</a>)#', '$1$2', $clean1); $ausgabe = strip_tags($str, '<p>'); echo $ausgabe;
Прежде чем я изменю html с сайта, я хочу получить объявление класса из диапазона в <p>
.
Вы пытались использовать str_replace
?
Если размещение тегов <p>
и <span>
согласовано, вы можете просто заменить один на другой с помощью
str_replace("replacement", "part to replace", $string);
dont parse html с регулярным выражением! этот класс должен предоставить то, что вам нужно http://simplehtmldom.sourceforge.net/
Причина не анализировать HTML с регулярным выражением – это если вы не можете гарантировать формат . Если вы уже знаете формат строки, вам не нужно беспокоиться о наличии полного парсера.
В вашем случае, если вы знаете, что это формат, вы можете использовать str_replace
str_replace('<p><span class="headline">', '<p class="headline"><span>', $data);
Ну, ответ уже был принят, но во всяком случае, вот как это сделать с родным DOM:
$dom = new DOMDocument; $dom->loadHTMLFile("http://www.ihr-apotheker.de/cs1.html"); $xPath = new DOMXpath($dom); // remove links but keep link text foreach($xPath->query('//a') as $link) { $link->parentNode->replaceChild( $dom->createTextNode($link->nodeValue), $link); } // switch classes foreach($xPath->query('//p/span[@class="headline"]') as $node) { $node->removeAttribute('class'); $node->parentNode->setAttribute('class', 'headline'); } echo $dom->saveHTML();
В боковом, HTML есть элементы для заголовков, поэтому почему бы не использовать элемент <h*>
вместо использования семантически лишнего класса заголовка.