我在PHP中寻找一个正则表达式,当它们是内部时,可以替换锚标签的href
属性和IMG,样式,脚本等的src
属性。
一个例子:如果我正在查看页面http://www.mysite.com
并在该页面上有一张图片:
<img src="/images/picture.gif />
然后我希望能够将其更改为:
<img src="http://mysite.com/images/picture.gif />
锚标记的相同之处:<a href="otherpage.php" >foo</a>
应更改为
<a href="http://mysite.com/otherpage.php" >foo</a>
此外,它应该能够处理具有src=
或href=
属性的其他元素,并且它应该对具有一个或多个其他属性的元素起作用(例如{{ 1}})
我试过像
这样的东西<img class="test" src="/images/picture.gif alt="some picture" />
但是效果不好。它采用了src属性,但它也捕获了src之后的所有属性。此外,它没有捕获不以/(例如preg_replace("/src=[\"']([\/])(.*)?[\"'] /", "src='".$domain."/$2'", $htmldata);
)
答案 0 :(得分:3)
我建议将它们保留为“内部”链接,只需添加HTML base tag即可。希望您的预期用途允许此解决方案。
编辑:我(@ManseUK)将链接更改为w3.org网站而不是答案 1 :(得分:2)
使用U修饰符更改贪婪并允许零前导斜杠:
/(?:src|href)\s*=\s*[\"\'](?:\/*)([\w\.]*)[\"\']/U
...因为你不需要src | href或前导斜杠作为反向引用,匹配但是省略它们?:
然后,图像名称变为$ 1而不是$ 2.
我在整个模式中使用U修饰符是因为,什么时候?否则出现在?:中我不需要额外的粒度,我的眼睛看得更清楚。
虽然正如其他人所指出的那样,通过正则表达式做这件事可能不是最好的答案......:)
答案 2 :(得分:0)
尝试这种模式
(src|href)\s*=\s*[\'\"]\/(.*?)[\'\"]
答案 3 :(得分:0)
$url = 'http://domain.com/';
$result = preg_replace('/(?<=href=[\'"]|src=[\'"])\/?/', $url.'$1', $input);