是否可以在不包含协议的网址(href& src)中添加协议?
例如,我想替换此网址:
<a href="/page/image.png" target="_blank">TEXT</a>
为:
<a href="http://my-webpage.com/page/image.png" target="_blank">TEXT</a>
但重要的是两件事:
如果href / src中的原始URL是从斜杠&#34; /&#34;开始的,那么带有域的协议应该在没有斜杠的情况下添加,但是当原始URL不是从斜杠 - 带域的协议应该用斜杠添加,
如果原始网址是从&#34; ../"开始;或&#34; ./"等 - 应该删除然后,带域的协议应该用斜杠添加。
是否可以在一个正则表达式中执行此操作?
感谢。
编辑:
有我的代码:
$url = 'http://my-page.com/';
$html = file_get_contents($url);
preg_match('"charset=([A-Za-z0-9\-]+)"si', $html, $charset);
$charset = strlen($charset[1]) > 3 ? $charset[1] : 'UTF-8';
$html = mb_convert_encoding($html, 'HTML-ENTITIES', $charset);
preg_match_all('"href=\"(.*?)\""si', $html, $matches);
foreach($matches[1] AS $key => $value)
{
if ( preg_match("/^(http|https):/", $value) )
{
continue;
}
$html = str_replace($value, $url.$value, $html);
}
preg_match_all('"src=\"(.*?)\""si', $html, $matches);
foreach($matches[1] AS $key => $value)
{
if ( preg_match("/^(http|https):/", $value) )
{
continue;
}
$html = str_replace($value, $url.$value, $html);
}
echo $html;
答案 0 :(得分:0)
我会在sed或其他配方中使用这个正则表达式:
sed 's/href="/href="http://site.domain/g'