質問

MagpieでRSSフィードからデータを取得しています。
$rss[description] HTML要素を含むCDATAが含まれています。

<![CDATA[  
<div>  
 <a href='url'>  
  <img src='img_url' alt='aaa' title='bbb' border='0' width='116' height='116'>  
 </a>  
</div>]]>  
Some other text  

どうすればフェッチできますか」img_url「これから? preg_match() 唯一の方法?たぶん私はsimplexmlを使用できますか?

役に立ちましたか?

解決

CDATA HTMLを含む文字列があります。したがって、最初にテキストとして扱いますが、このテキストはHTMLを含むことを意図しているため、HTMLの解析に適したソリューションを使用してこのテキストを解析します。

言い換えると: ジョブに適切なツール(HTMLパーサー)を使用(HTMLを解析).

すでにあります PHPでHTMLを解析するための既存のソリューション - 例。この質問への回答を参照してください:

  1. HTMLをPHPで解析および処理する方法は?
  2. PHP用の堅牢で成熟したHTMLパーサー.

したがって、基本的に、XMLからHTML文字列を取得することができます。ここで、HTMLを解析し、上記のいくつかのソリューションを使用して画像のソースを取得します。

使用 preg_match() HTMLを解析することは良い考えではありません, 、HTMLパーサーが適している単純なことを行うには非常に複雑である必要があるためです。

他のヒント

適切なツールを使用できる正規表現を使用しないでください。私の頭に浮かぶ何か(たぶんそれは簡単にできるかもしれませんが):

$descr = $rss[description]; // String. You have extracted description part from your feed

$dom = new DOMDocument();
$dom->loadHTML($descr); // or you can use loadXML
if (!$dom) {
    die('Error loading HTML string.');
}

$xml = simplexml_import_dom($dom);
$imgSrc = (string)$xml->body->div->a->img['src'];

どうぞ。あなたの例CDATAに基づいています $imgSrc に等しくなります img_url.

はい、Regexを使用する必要があります。CDATAとは、データを解析なしで通常の文字列として扱う必要があることを意味するため、文字列と考える必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top