You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PHP在字符串中查找src与srcset标签?

在PHP中同时提取HTML字符串里的src和srcset属性

Hey there! 想要在PHP的$source字符串里同时抓取src和srcset属性,这里有两种实用方案,咱分情况来看:

推荐方案:用DOMDocument解析(靠谱不翻车)

HTML是结构化文档,用正则硬怼很容易踩坑(比如嵌套引号、属性值里的特殊字符),所以优先用PHP内置的DOM扩展来处理,步骤如下:

<?php
$source = '<img src="image.jpg" srcset="image-2x.jpg 2x, image-3x.jpg 3x" alt="示例图片">
<source srcset="video-480p.mp4 480w, video-720p.mp4 720w" type="video/mp4">
<img src="another.jpg" alt="另一张图">';

// 初始化DOM文档
$dom = new DOMDocument();
// 处理HTML可能存在的格式问题,抑制警告
libxml_use_internal_errors(true);
$dom->loadHTML($source);
libxml_clear_errors();

// 获取所有可能包含src或srcset的元素(比如img、source等,你可以按需调整)
$elements = $dom->getElementsByTagName('img');
$elements->length && $elements = iterator_to_array($elements);
$sourceElements = $dom->getElementsByTagName('source');
$sourceElements->length && $elements = array_merge($elements, iterator_to_array($sourceElements));

// 遍历提取属性
$results = [];
foreach ($elements as $elem) {
    $item = [];
    if ($elem->hasAttribute('src')) {
        $item['src'] = $elem->getAttribute('src');
    }
    if ($elem->hasAttribute('srcset')) {
        $item['srcset'] = $elem->getAttribute('srcset');
    }
    $results[] = $item;
}

// 输出结果
print_r($results);
?>

这段代码的好处是:

  • 自动处理HTML的各种格式问题,不管属性是单引号、双引号还是无引号(符合标准的情况)
  • 精准定位元素,不会误匹配到文本里的类似字符串
  • 扩展性强,你可以轻松添加其他要抓取的元素或属性

备选方案:正则表达式(适合简单场景)

如果你的$source是结构非常简单的HTML片段,也可以用正则快速搞定。这里的正则会匹配src或srcset属性,支持单双引号包裹的值:

<?php
$source = '<img src="image.jpg" srcset="image-2x.jpg 2x, image-3x.jpg 3x" alt="示例图片">
<source srcset="video-480p.mp4 480w, video-720p.mp4 720w" type="video/mp4">';

// 正则模式:匹配src或srcset属性,捕获属性名和值
$pattern = '/(src|srcset)\s*=\s*(["\'])(.*?)\2/i';
preg_match_all($pattern, $source, $matches, PREG_SET_ORDER);

// 整理结果
$results = [];
foreach ($matches as $match) {
    $results[] = [
        'attribute' => $match[1],
        'value' => $match[3]
    ];
}

print_r($results);
?>

⚠️ 注意:正则的局限性很明显——如果属性值里包含引号(比如src="img'with'quote.jpg")、或者HTML结构复杂(比如注释里的类似字符串),正则会出错,所以只推荐在简单场景下使用。

总的来说,优先用DOMDocument方案,稳定性拉满~

内容的提问来源于stack exchange,提问作者mamiw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:20:02