プロが教えるわが家の防犯対策術!

HTMLのデータが入っている変数 $data から、一番初めにでてきた<img>タグに囲まれるURLと、そこに<a>タグがある場合はそのリンク先のURLを取得させたいのですが、もし<a>のない場合のケースでどう条件付ければよいかわからず、困っています。

<?
$data = "<html><head></head><body>こんにちは、元気ですか?
<a href=\"http://www.hoge.co.jp\"><img=\"http://www.hoge.c …
<img=\"http://www.hoge02.co.jp/hoge02.jpg\">
</body></html>";

if (preg_match("#<a href=\"(.+)\"><img=\"(.+)\"></a>#", $txt, $reg)){
$link = $reg[1];
$url = $reg[2];
}
echo "URL = {$url}<br> LINK = {$link}";
?>

この場合、一番初めに出てきた hoge.jpg のURLとLINK両方取得してくれますが、もし hoge02.jpg が先に来た場合、そのURLを取得させるようにしたいのですが可能でしょうか?

もし何かご存知の方おられましたらどうぞよろしくお願いいたします。

A 回答 (1件)

かなり緩いマッチ条件ですが、以下でどうでしょうか。


$data = "<html><head></head><body>こんにちは、元気ですか?<a href=\"http://www.hoge.co.jp\"><img=\"http://www.hoge.c …
if (preg_match("/(?:<a href=\"([^\"]+)\">)?\s*<img=\"([^\"]+)\">/", $data, $reg))
{
$link = $reg[1];
$url = $reg[2];
}
・<img="URL"> ではなく <img src="URL">が正しい?
・$dataが、不特定の人が投稿する掲示板記事のようなものなら、
 $link、$urlがURLとして妥当な形式かを確認し、HTMLエスケープ
 をしてからechoするべきですね(クロスサイトスクリプティング
 を避けるためです)。
    • good
    • 0
この回答へのお礼

ありがとうございました。おかげさまで助かりました。

お礼日時:2006/10/24 10:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!