我想在此示例中将SRC属性转换为变量:
<img border="0" src="/images/image.jpg" alt="Image" width="100" height="100" />
所以例如 - 我想得到一个变量$foo = "/images/image.jpg"
。
重要! src属性将是动态,因此不能进行硬编码。
有没有快速简便的方法呢?
谢谢!
编辑:图像将是一个巨大字符串的一部分,基本上是新闻故事的内容。所以图像只是其中的一部分。
EDIT2:这个字符串中会有更多的图像,我只想得到第一个的src。这可能吗?
答案 0 :(得分:96)
使用DOMDocument
之类的HTML解析器,然后使用DOMXpath
评估您要查找的值:
$html = '<img id="12" border="0" src="/images/image.jpg"
alt="Image" width="100" height="100" />';
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$src = $xpath->evaluate("string(//img/@src)"); # "/images/image.jpg"
或者那些真正需要节省空间的人:
$xpath = new DOMXPath(@DOMDocument::loadHTML($html));
$src = $xpath->evaluate("string(//img/@src)");
对于那里的单行:
$src = (string) reset(simplexml_import_dom(DOMDocument::loadHTML($html))->xpath("//img/@src"));
答案 1 :(得分:20)
最好使用DOM解析器进行此类HTML解析。请考虑以下代码:
$html = '<img id="12" border="0" src="/images/image.jpg"
alt="Image" width="100" height="100" />';
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html); // loads your html
$xpath = new DOMXPath($doc);
$nodelist = $xpath->query("//img"); // find your image
$node = $nodelist->item(0); // gets the 1st image
$value = $node->attributes->getNamedItem('src')->nodeValue;
echo "src=$value\n"; // prints src of image
<强>输出:强>
src=/images/image.jpg
答案 2 :(得分:14)
我已经做到了更简单的方式,不像应该的那样干净,但它是一个快速的黑客
$htmlContent = file_get_contents('pageURL');
// read all image tags into an array
preg_match_all('/<img[^>]+>/i',$htmlContent, $imgTags);
for ($i = 0; $i < count($imgTags[0]); $i++) {
// get the source string
preg_match('/src="([^"]+)/i',$imgTags[0][$i], $imgage);
// remove opening 'src=' tag, can`t get the regex right
$origImageSrc[] = str_ireplace( 'src="', '', $imgage[0]);
}
// will output all your img src's within the html string
print_r($origImageSrc);
答案 3 :(得分:9)
我知道有人说你不应该使用正则表达式解析HTML,但在这种情况下我发现它非常好。
$string = '<img border="0" src="/images/image.jpg" alt="Image" width="100" height="100" />';
preg_match('/<img(.*)src(.*)=(.*)"(.*)"/U', $string, $result);
$foo = array_pop($result);
答案 4 :(得分:4)
$imgTag = <<< LOB
<img border="0" src="/images/image.jpg" alt="Image" width="100" height="100" />
<img border="0" src="/images/not_match_image.jpg" alt="Image" width="100" height="100" />
LOB;
preg_match('%<img.*?src=["\'](.*?)["\'].*?/>%i', $imgTag, $matches);
$imgSrc = $matches[1];
注意:您应该使用HTML解析器,例如DOMDocument
和不正则表达式。
答案 5 :(得分:3)
$str = '<img border="0" src=\'/images/image.jpg\' alt="Image" width="100" height="100"/>';
preg_match('/(src=["\'](.*?)["\'])/', $str, $match); //find src="X" or src='X'
$split = preg_split('/["\']/', $match[0]); // split by quotes
$src = $split[1]; // X between quotes
echo $src;
其他正则表达式可用于确定拉出的src标签是否是这样的图片:
if(preg_match('/([jpg]{3}$)|([gif]{3}$)|([jpeg]{3}$)|([bmp]{3}$)|([png]{3}$)/', $src) == 1) {
//its an image
}
答案 6 :(得分:-1)
可能有两个简单的解决方案: