2010-12-27 7 views
0

私はこれを使用して画像のsrcまたは画像のフルパスを抽出します。PHPを使用して画像からalt属性やtitle属性を抽出する

preg_match_all('/\< *[img][^\>]*src *= *[\"\']{0,1}([^\"\'\ >]*)/',$content,$matches); 

これまでのところ私はすべての画像ソースの配列を取得しています。私は貪欲になり、画像タグからaltとtitleの値をキャプチャしようとしています。

regexを使用することは推奨されませんが、本当にすばやい解決策が必要です。画像タグにaltやtitleがない場合、エラーを返すことは望ましくありません。

ご迷惑をおかけして申し訳ありません。私はそれがパーサーでより簡単で適切であることを知っていますが、そのpregの試合でsrcを得ることができたので、altとtitleも取得できると思いました! :)

どうもありがとう、幸せな新年:D

+1

あなたはそうです。パーザで行うのが簡単で、より適切です。 :)すべての可能な組み合わせをキャッチする正規表現はひどく見えます。 –

+0

さらに多くのタグをキャプチャしたい場合は、特に後で決定すると... – tdammers

+0

問題は、スクリプトが多くのユーザーの多くのパブリックサーバーにインストールされ、パーサーが存在しないか、ホスト上で動作しない場合彼らは私を責めるだろう:)すべてのサーバーで互換性がありサポートされているパーサーはありますか? –

答えて

2

ここではPHPのDOMパーサを使用してソリューションです:

$domd = new DOMDocument(); 
libxml_use_internal_errors(true); 
$domd->loadHTML(file_get_contents("http://stackoverflow.com")); 
libxml_use_internal_errors(false); 

$items = $domd->getElementsByTagName("img"); 
$data = array(); 

foreach($items as $item) { 
    $data[] = array(
    "src" => $item->getAttribute("src"), 
    "alt" => $item->getAttribute("alt"), 
    "title" => $item->getAttribute("title"), 
); 
} 
+0

質問。イメージは$ contentという変数に格納されています.HTMLや新しいドキュメントを読み込む代わりに使用できますか?どうやって? –

+0

3行目: '$ domd-> loadHTML($ content)'。 – Maerlyn

+0

うわー:D最初の試みからうまくいった。それは正規表現よりも簡単だよ。いくつかの画像がaltまたはtitleを持たない場合は、スクリプトを停止しません。 –

2

...これは私が3分に思い付くことができる最高で、これを試してみてください
if(preg_match_all('@<img(\s?(src|alt|title)="([^"]+)"\s?)?(\s?(src|alt|title)="([^"]+)"\s?)?(\s?(src|alt|title)="([^"]+)"\s?)?\/?>@si',$content,$m)){ 
$img_array = array(
    $m[2][0]=>$m[3][0], 
    $m[5][0]=>$m[6][0], 
    $m[8][0]=>$m[9][0] 
    );} 

print_r($img_array);