繁体   English   中英

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

[英]php - preg_replace - adding a protocol to href and src elements

是否可以向不包含协议的 url(href 和 src)添加协议?

例如,我想替换这个 URL:

<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 以斜杠“/”开头,则应在末尾添加不带斜杠的域协议,但当原始 URL 不是从斜杠开头时 - 应添加带域的协议,

  • 如果原始 URL 以 "../" 或 "./" 等开头 - 应该删除,然后,应该用斜杠添加域的协议。

是否可以在一个正则表达式中完成?

谢谢。

编辑:

有我的代码:

$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;

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM