我想将所有url img src标记值从一个字符串更改为第二个字符串,如下所示:
$str1 = "< img src="//d3kq20n0vvk93.cloudfiojiojront.net/cbbcadjiojoijc470efd702jijiojoijiojioc4.jpg" alt="">";
为:
$str2 = "< img src="//d3kq20n0vvk93.cloudfiojiojront.net/cbbcadjiojoijc470efd702jijiojoijiojioc4.jpg?ttl=3600/" alt="">";
我试过这种方式,但它在src =“”tag:
中无效 print preg_replace('/<img\s.*?\bsrc="(.*?)".*?>/si', "$0?ttl=3600", $str);
我该如何解决? 提前致谢
答案 0 :(得分:0)
它无效,因为$0
指的是整个匹配(从<img
到>
),您将获得类似{{1}的内容}}
您需要的是只更改src内容,您可以:
使用捕获组:
<img...>?tll=3600
使用\K
(重置匹配开头的匹配开始)和lookahead (只执行检查而不是比赛结果的一部分)
echo preg_replace('~(<img\s.*?\bsrc=".*?)(".*?>)~si', '$1?ttl=3600$2', $str);
但是,请记住,HTML代码可能充满了陷阱(单引号之间的属性或根本没有引号,没有src属性的img标签,等号周围未定义的空格数,属性值或包含字符串echo preg_replace('~<img\s.*?\bsrc=".*?\K(?=".*?>)~si', '?ttl=3600', $str);
...)的文本内容。这就是为什么,最干净的解决方案是使用特定的工具来处理HTML。
DOMDocument的一个例子:
src="
如果您处理的是HTML而不是整个文档,并且您的PHP版本大于或等于5.3.6,则可以将最后一行替换为:
$dom = new DOMDocument();
@$dom->loadHTML($str);
$imgNodes = $dom->getElementsByTagName('img');
foreach($imgNodes as $imgNode) {
if ($imgNode->hasAttribute('src') && !empty($src = $imgNode->getAttribute('src')))
$imgNode->setAttribute('src', $src . '?ttl=3600');
}
$result = $dom->saveHTML();