正则表达式和 PHP - 将 src 属性与 img 标签隔离

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/2120779/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-25 05:07:24  来源:igfitidea点击:

Regex & PHP - isolate src attribute from img tag

phpregexstring

提问by Jeff

With PHP, how can I isolate the contents of the src attribute from $foo? The end result I'm looking for would give me just "http://example.com/img/image.jpg"

使用 PHP,如何将 src 属性的内容与 $foo 隔离?我正在寻找的最终结果只会给我“ http://example.com/img/image.jpg

$foo = '<img class="foo bar test" title="test image" src="http://example.com/img/image.jpg" alt="test image" width="100" height="100" />';

回答by John Parker

If you don't wish to use regex (or any non-standard PHP components), a reasonable solution using the built-in DOMDocument classwould be as follows:

如果您不想使用正则表达式(或任何非标准 PHP 组件),使用内置DOMDocument 类的合理解决方案如下:

<?php
    $doc = new DOMDocument();
    $doc->loadHTML('<img src="http://example.com/img/image.jpg" ... />');
    $imageTags = $doc->getElementsByTagName('img');

    foreach($imageTags as $tag) {
        echo $tag->getAttribute('src');
    }
?>

回答by St.Woland

Code

代码

<?php
    $foo = '<img class="foo bar test" title="test image" src="http://example.com/img/image.jpg" alt="test image" width="100" height="100" />';
    $array = array();
    preg_match( '/src="([^"]*)"/i', $foo, $array ) ;
    print_r( $array[1] ) ;

Output

输出

http://example.com/img/image.jpg

回答by AntonioCS

I got this code:

我得到了这个代码:

$dom = new DOMDocument();
$dom->loadHTML($img);
echo $dom->getElementsByTagName('img')->item(0)->getAttribute('src');

Assuming there is only one img :P

假设只有一个 img :P

回答by karim79

// Create DOM from string
$html = str_get_html('<img class="foo bar test" title="test image" src="http://example.com/img/image.jpg" alt="test image" width="100" height="100" />');

// echo the src attribute
echo $html->find('img', 0)->src;

http://simplehtmldom.sourceforge.net/

http://simplehtmldom.sourceforge.net/

回答by Josh Janusch

I'm extremely late to this, but I have a simple solution not yet mentioned. Load it with simplexml_load_string(if you have simplexml enabled) and then flip it through json_encodeand json_decode.

我对此非常晚,但我有一个尚未提及的简单解决方案。加载它simplexml_load_string(如果您启用了 simplexml),然后通过json_encode和翻转它json_decode

$foo = '<img class="foo bar test" title="test image" src="http://example.com/img/image.jpg" alt="test image" width="100" height="100" />';

$parsedFoo = json_decode(json_encode(simplexml_load_string($foo)), true);
var_dump($parsedFoo['@attributes']['src']); // output: "http://example.com/img/image.jpg"

$parsedFoocomes through as

$parsedFoo通过作为

array(1) {
  ["@attributes"]=>
  array(6) {
    ["class"]=>
    string(12) "foo bar test"
    ["title"]=>
    string(10) "test image"
    ["src"]=>
    string(32) "http://example.com/img/image.jpg"
    ["alt"]=>
    string(10) "test image"
    ["width"]=>
    string(3) "100"
    ["height"]=>
    string(3) "100"
  }
}

I've been using this for parsing XML and HTML for a few months now and it works pretty well. I've had no hiccups yet, though I haven't had to parse a large file with it (I imagine using json_encodeand json_decodelike that will get slower the larger the input gets). It's convoluted, but it's by far the easiest way to read HTML properties.

几个月来,我一直在使用它来解析 XML 和 HTML,而且效果很好。我已经没有打嗝呢,虽然我还没有解析它一个大文件(我想象使用json_encodejson_decode喜欢,将得到较慢的输入变得更大)。这很复杂,但它是迄今为止读取 HTML 属性的最简单方法。

回答by WNRosenberg

preg_matchsolves this problem nicely.

preg_match很好的解决了这个问题。

See my answer here: How to extract img src, title and alt from html using php?

在此处查看我的答案:如何使用 php 从 html 中提取 img src、title 和 alt?

回答by Jeff

Here's what I ended up doing, although I'm not sure about how efficient this is:

这是我最终做的,虽然我不确定这有多有效:

$imgsplit = explode('"',$data);
foreach ($imgsplit as $item) {
    if (strpos($item, 'http') !== FALSE) {
        $image = $item;
        break;
    }
}

回答by Joel A. Villarreal Bertoldi

You can go around this problem using this function:

您可以使用此功能解决此问题:

function getTextBetween($start, $end, $text)
{
 $start_from = strpos($text, $start);
 $start_pos = $start_from + strlen($start);
 $end_pos = strpos($text, $end, $start_pos + 1);
 $subtext = substr($text, $start_pos, $end_pos);
 return $subtext;
}
$foo = '<img class="foo bar test" title="test image" src="http://example.com/img/image.jpg" alt="test image" width="100" height="100" />';
$img_src = getTextBetween('src="', '"', $foo);

回答by user256058

try this pattern:

试试这个模式:

'/< \s* img [^\>]* src \s* = \s* [\""\']? ( [^\""\'\s>]* )/'

回答by Oni Victor

lets assume i use

让我们假设我使用

$text ='<img src="blabla.jpg" alt="blabla" />';

in

getTextBetween('src="','"',$text);

the codes will return :

代码将返回:

blabla.jpg" alt="blabla" 

which is wrong, we want the codes to return the text between the attribute value quotes i.e attr = "value".

这是错误的,我们希望代码返回属性值引号之间的文本,即 attr = "value"。

so

所以

  function getTextBetween($start, $end, $text)
            {
                // explode the start string
                $first_strip= end(explode($start,$text,2));

                // explode the end string
                $final_strip = explode($end,$first_strip)[0];
                return $final_strip;
            }

does the trick!.

有诀窍!。

Try

尝试

   getTextBetween('src="','"',$text);

will return:

将返回:

blabla.jpg

Thanks all the same , because your solution gave me an insight to the final solution .

同样感谢,因为您的解决方案让我对最终解决方案有了深入的了解。