0

情景

我正在使用 PHP 的 SimpleXML 来解析博客提要。树中最重要的节点是内容。我想修剪节点的脂肪,即博客站点添加的样式功能。它都包含在同一个节点中,并且对 html 实体进行了编码。FirePHP 日志显示该字符串是 HTML。

例如,内容节点如下所示:

<content type='html'>
BLAH BLAH BLAH.&lt;div class="blogger-post-footer"&gt;&lt;img width='1'
height='1' src='https://blogger.googleusercontent.com/tracker
6552111825067891333-7815715921198109330?l=cobracabanarecords.blogspot.com'
alt='' /&gt;&lt;/div&gt;
&lt;a href="http://4.bp.blogspot.com/-RQPMMDLPMqg/T9ePf9jbXFI/
AAAAAAAAAGs/6egu-05Zim4/s1600/blogHeader.jpg" imageanchor="1"
style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;
"&gt;&lt;img border="0" height="92" src="http://4.bp.blogspot.com/
-RQPMMDLPMqg/T9ePf9jbXFI/AAAAAAAAAGs/6egu-05Zim4/s320/blogHeader.jpg" 
width="320" /&gt;&lt;/a&gt;
&lt;a href="http://website.com"&gt;Homepage!&lt;/a&gt;
</content>

我的问题

我怎样才能去掉我想要的部分,并留下臃肿?我想保留文本、图像和链接,但不需要博客的样式语法或类“blogger-post-footer”的元素。是否有一个类或函数可以识别那些特定的 HTML 元素并允许我去除不相关的元素?

更新

我尝试了推荐的 html_entity_decode 函数。现在我有一个字符串中的原始 html。我阅读了 DOMDocument 类并尝试了这个:

$doc = new DOMDocument();
$doc->loadHTML($htmlContent);

使用 firephp 记录显示 $doc 变量仅包含数字 1,我无法像处理 HTML 一样操作字符串。如果我可以让它工作,我认为下一步将是尝试一个 getElementsByTagName 函数,然后遍历节点列表来 removeChild,或者将它复制到一个数组中。我仍然可以在这方面使用一些指导。

4

3 回答 3

1

一旦我走上正确的轨道,我就能在这里找到正确的语法:

https://stackoverflow.com/a/4177407/1193509

结果与

$htmlContent = html_entity_decode($entry->content);
$doc = new DOMDocument();
$doc->loadHTML($htmlContent);
foreach($doc->getElementsByTagName('div') as $divs){
    $divs->parentNode->removeChild($divs);
}
于 2012-06-26T14:17:43.597 回答
0

从 <content> 获取字符串,在字符串上使用html_entity_decode()来获取原始 html。使用strip_tags()删除所有 html 或使用内容 html 创建另一个简单的 xml 对象,然后通过并删除样式/其他属性和标签。

您还可以使用 strip_tags() 删除除允许的标签白名单之外的所有 html。

于 2012-06-25T22:07:44.590 回答
0

您还可以使用以下正则表达式方法来清理字符串,同时保留 img 和 a 标签

$string_of_content = html_entity_decode(""); // Read the string into this and don't forget to decode the entities

preg_replace("/<(?!img)(?!a).*?>/","",$string_of_content);

尽管您必须解码 HTML 实体才能使此方法正常工作。

于 2012-06-25T22:30:31.587 回答