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 関数を試してから、nodelist をトラバースして 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 tags を保持しながら、次の正規表現メソッドを使用して文字列をクレンジングすることもできます。

$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 に答える