PHP - 如何用另一个短语替换短语?

时间:2010-08-02 14:44:01

标签: php html string

如何使用此<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>标记。

4 个答案:

答案 0 :(得分:3)

不要用正则表达式解析html! 这个课程应该提供你所需要的 http://simplehtmldom.sourceforge.net/

答案 1 :(得分:1)

如果您无法保证格式,则不使用正则表达式解析HTML的原因是。如果您已经知道字符串的格式,则不必担心有完整的解析器。

在您的情况下,如果您知道格式,则可以使用str_replace

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

答案 2 :(得分:1)

嗯,答案已被接受,但无论如何,这里是如何使用原生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*>元素而不是使用语义上多余的“标题”类。

答案 3 :(得分:0)

您是否尝试过使用str_replace

如果<p><span>代码的展示位置一致,您可以使用

替换另一个代码。
str_replace("replacement", "part to replace", $string);