2011-09-22 55 views
1

如何從RSS提要中刪除多個<br>標籤?我嘗試了這兩個,但沒有做任何改變。如何從RSS提要中刪除多個換行符?

str_replace("<br/><br/>","&",$entry->description); 
str_replace("<br><br>","&",$entry->description); 
str_replace("&lt;br/&gt;&lt;br/&gt;","&",$entry->description); 
str_replace("&lt;br /&gt;&lt;br /&gt;","&",$entry->description); (with space) 
Here is a sample 

This is copied from feedburn RSS&lt;br /&gt;&lt;br /&gt;with view page source.

+0

你可以發佈一些有問題的行的原始輸出嗎? – Jordan

回答

0

打開它在一個DOM解析器,並尋找br元素其中nextSibling(或previousSibling如果反向迭代)是另一個br元素(您可以對多個爲直接兄弟元素的br元素重複此操作)。然後刪除它們。

$dom = new DOMDocument; 

$dom->loadHTML($html); 

$elements = $dom->getElementsByTagName('br'); 
$length = $elements->length; 

while ($length--) { 
    $elem = $elements->item($length);     
    $prevSibling = $elem->previousSibling; 

if ($prevSibling->nodeType == 1 AND $prevSibling->tagName == 'br') { 
     $parent = $elem->parentNode; 
     $parent->removeChild($elem); 
     $parent->removeChild($prevSibling); 
     $length--; 
    } 

} 

CodePad

我選擇反向迭代以保存用於增量編號的另一個變量。

我不得不使用帶有索引的while() { ... },因爲foreach()將持有對我將要刪除的節點的引用,這會導致錯誤。

+0

D. Voter先生,你會解釋一下嗎?乾杯。 – alex

+0

嗨亞歷克斯,我應該回應什麼? – EnexoOnoma

0

它可能得到逃脫,所以也許嘗試:

$formatted = $entry->description 
$formatted = str_replace("&lt;br/&gt;&lt;br/&gt;","&",$formatted); 
$formatted = str_replace("&lt;br /&gt;&lt;br /&gt;","&",$formatted); 

print($formatted) 

確保您打印/回聲$格式化。 str_replace不是破壞性函數,所以你需要使用它的返回值。

+0

我試過了,但沒有... – Jeksiliki

+0

我更新了我的問題。 – Jeksiliki

+0

我對這種感興趣也 – EnexoOnoma

-1

如果你想更換一個以上的連勝,這將做到這一點:

<?php 
    $entry = "Hello <br><br><br> my <br /><br /> dear <br/><br/><br/> friend"; 
    $formatted = preg_replace('/(<br ?\/?>)+/',"<br />",$entry); 
    var_dump($formatted); 
?> 

這將返回:

'Hello <br /> my <br /> dear <br /> friend' 
+0

是的不止一個...... – Jeksiliki

+0

相應編輯。 – derp