如何使用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
相关产品推荐
相关产品推荐

