[英]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.