2010-08-02 47 views
2

我如何用這個<p><span class="headline">這個<p class="headline"><span> 最簡單的PHP。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; 

之前,我改變來自我想從跨度類聲明的<p>代碼的網站的HTML。

回答

0

您是否嘗試過使用str_replace

如果<p><span>標籤的位置是一致的,你可以簡單地更換一個用於其他與

str_replace("replacement", "part to replace", $string); 
+0

thx爲您的快速幫助像所有其他人一樣!這對我很好, – Arwed 2010-08-02 15:08:03

+0

不客氣。我很高興這是一個簡單的修復 – 2010-08-02 15:56:07

3

不用正則表達式解析html! 此課程應提供您需要的內容 http://simplehtmldom.sourceforge.net/

+0

建議的第三方替代品,實際使用DOM而不是字符串分析:[phpQuery](http://code.google.com/p/phpquery/),[Zend_Dom](http://framework.zend.com/ manual/en/zend.dom.html)和[FluentDom](http://www.fluentdom.org)。 – Gordon 2010-08-02 14:58:24

+0

,看起來很不錯,我會進一步調查 – Arwed 2010-08-02 15:06:48

1

的理由不來解析HTML與正則表達式是如果你不能保證格式。如果你已經知道字符串的格式,你不必擔心有一個完整的解析器。

在你的情況,如果知道是這樣的格式,你可以使用str_replace

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

+0

在我的情況下html總是具有相同的格式。但thx爲您的答案! – Arwed 2010-08-02 15:07:29

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*>元素而不是使用語義上多餘的「標題」類。

+0

,因爲我喜歡編輯CSS文件,然後在HTML中編碼 - 此外,我想看起來不同,然後我的頭條其餘部分 – Arwed 2010-08-02 15:56:33

+0

如果我想擦除鏈接的文本,我也只是留下$ dom- > createTextNode($ link-> nodeValue),$ link); 我猜? – Arwed 2010-08-02 15:58:30

+0

@Arwed您必須區分語義結構和表示。 ''元素構成你的代碼,但他們沒有說明標題的外觀。瀏覽器通常渲染它們大而大膽的事實是瀏覽器。文本瀏覽器不會這樣做。而且,您仍然可以通過應用不同的類來設計相同的''。 – Gordon 2010-08-02 16:06:16