【问题标题】:how to get link from img tag如何从img标签获取链接
【发布时间】:2012-07-09 12:35:18
【问题描述】:
$img = '<img src="http://some-img-link" alt="some-img-alt"/>';

$src = preg_match('/<img src=\"(.*?)\">/', $img);

echo $src;

我想从 img 标签中获取 src 值,也许还有 alt 值

【问题讨论】:

  • “也许是 alt 值”你要么做,要么不做,编码“也许”是非常困难的
  • 如果你学会接受回答你问题的答案,你会发现你得到的答案更加一致。这也是我们在stackoverflow上表示感谢的方式

标签: php regex url preg-match image


【解决方案1】:

假设您总是得到问题中显示的 img html。

现在在正则表达式中你提供了它的说法,在 src 属性之后,它给出了 img 的结束标记。但在字符串中也有一个 alt 属性。所以你也需要关心它。

/<img src=\"(.*?)\".*\/>/

如果你还要检查 alt 则检查正则表达式。

/<img src=\"(.*?)\"\s*alt=\"(.*?)\"\/>/

你也只是检查它是否匹配。如果需要获取匹配项,则需要向 preg_match 提供第三个参数,该参数将填充匹配项。

$img = '<img src="http://some-img-link" alt="some-img-alt"/>';
$src = preg_match('/<img src=\"(.*?)\"\s*alt=\"(.*?)\"\/>/', $img, $results);
var_dump($results);

注意:上面给出的正则表达式不是那么通用,如果你能提供将出现的 img 字符串,将提供更强大的正则表达式。

【讨论】:

  • img str 示例:$img = '&lt;img src="http://www.gravatar.com/avatar/21ba0ba4a13517d5c1a6b71ece138ba6?s=32&amp;d=identicon&amp;r=PG" alt="avatar from gravatar"&gt;';
  • 那是因为问题中提供的 img 字符串以“/>”结尾,而上面的示例以“>”结尾。最好从正则表达式中删除该部分,这样即使有更多属性也不会中断。所以正则表达式就像 /alt=\"(.?)\"/
【解决方案2】:
 function scrapeImage($text) {
    $pattern = '/src=[\'"]?([^\'" >]+)[\'" >]/';
    preg_match($pattern, $text, $link);
    $link = $link[1];
    $link = urldecode($link);
    return $link;

}

【讨论】:

    【解决方案3】:

    测试代码:

    $ input=’<img src= ”http://www.site.com/file.png” > ‘;
    preg_match(“<img.*?src=[\"\"'](?<url>.*?)[\"\"'].*?>”,$input,$output);
    echo $output;   // output = http://www.site.com/file/png
    

    【讨论】:

      【解决方案4】:

      How to extract img src, title and alt from html using php?

      查看这篇文章的第一个答案。

      您将使用 preg_match,只是方式略有不同。

      【讨论】:

        【解决方案5】:

        试试这个代码:

        <?php
        $doc = new DOMDocument();
        $doc->loadHTML('<img src="" />');
        $imageTags = $doc->getElementsByTagName('img');
        
        foreach($imageTags as $tag) {
            echo $tag->getAttribute('src');
        }
        ?>
        

        【讨论】:

        • 只试试这个 :-> "echo $img ->getAttribute('src')".
        【解决方案6】:

        你也可以使用这个库:SimpleHtmlDom

        <?php
        $html = new simple_html_dom();
        $html->load('<html><body><img src="image/profile.jpg" alt="profile image" /></body></html>');
        $imgs = $html->find('img');
        foreach($imgs as $img)
        print($img->src);
        ?>
        

        【讨论】:

          【解决方案7】:
          preg_match('/<img src=\("|')([^\"]+)\("|')[^\>]?>/', $img);
          

          【讨论】:

          • 这可能适用于所有情况,也可能不适用于所有情况,因为' 可用于引用字符串;在某些情况下,报价可能根本不存在(糟糕的 HTML)。
          • @ColeJohnson:被拒绝。你忘了逃跑'。而且我认为最好自己写答案。
          【解决方案8】:

          上面你已经有足够好的响应了,但是这里有另一个代码(更通用):

          function retrieve_img_src($img) {
            if (preg_match('/<img(\s+?)([^>]*?)src=(\"|\')([^>\\3]*?)\\3([^>]*?)>/is', $img, $m) && isset($m[4]))
              return $m[4];
            return false;
          }
          

          【讨论】:

            【解决方案9】:

            可以使用 JQuery 获取 src 和 alt 属性

            在标题中包含 jquery

             <script type="text/javascript" 
                       src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js">
             </script>
            

            //HTML

            //获取src和alt属性

            <script type='text/javascript'>
             // src attribute of first image with id =imgId
            
             var src1= $('#imgId1').attr('src');
             var alt1= $('#imgId1').attr('alt');
            
             var src2= $('#imgId2').attr('src');
             var alt2= $('#imgId2').attr('alt');
            </script>
            

            【讨论】:

            • 但这仅适用于客户端。看来他想在服务器端匹配。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-12-06
            • 1970-01-01
            • 2021-04-08
            • 1970-01-01
            • 1970-01-01
            • 2017-06-23
            • 1970-01-01
            相关资源
            最近更新 更多