PHP - Как заменить фразу другой? - PullRequest
2 голосов
/ 02 августа 2010

Как я могу заменить это <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 с сайта, я хочу получить объявление класса из span в тег <p>.

Ответы [ 4 ]

3 голосов
/ 02 августа 2010

Не анализируйте HTML с регулярным выражением!этот класс должен предоставить то, что вам нужно http://simplehtmldom.sourceforge.net/

1 голос
/ 02 августа 2010

Ну, ответ уже был принят, но в любом случае, вот как это сделать с собственным 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();

В sidenote у HTML есть элементы для заголовков, так почему бы не использовать <h*>элемент вместо использования семантически лишнего класса «заголовок».

1 голос
/ 02 августа 2010

Причина, по которой HTML-код не анализируется с помощью регулярных выражений, - , если вы не можете гарантировать формат .Если вы уже знаете формат строки, вам не нужно беспокоиться о наличии полного анализатора.

В вашем случае, если вы знаете, что это формат, вы можете использовать str_replace

str_replace('<p><span class="headline">', '<p class="headline"><span>', $data);

0 голосов
/ 02 августа 2010

Вы пробовали использовать str_replace?

Если расположение тегов <p> и <span> совпадает, вы можете просто заменить один на другой на

str_replace("replacement", "part to replace", $string);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...