php - preg_replace - 为href和src元素添加协议

时间:2016-04-19 21:51:38

标签: php

是否可以在不包含协议的网址(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;

1 个答案:

答案 0 :(得分:0)

我会在sed或其他配方中使用这个正则表达式:

sed 's/href="/href="http://site.domain/g'