2011-09-22 68 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