Try this:
<?php
function convertLink($str)
{
//ensure a scheme exists
if(strpos($str,'http://')===false&&strpos($str,'https://')===false)
{
$str='http://'.$str;
}
$parts=parse_url($str);
$scheme=$parts['scheme'];
$domain=$parts['host'];
$path=array_key_exists('path',$parts)?$parts['path']:'';
$query=array_key_exists('query',$parts)?('?'.$parts['query']):'';
$fragment=array_key_exists('fragment',$parts)?('#'.$parts['fragment']):'';
if(strpos($parts['host'],'www.')===0){$domain=substr($parts['host'],4);}
if(array_key_exists('port',$parts)){$domain.=':'.$parts['port'];}
if(strpos($path,'/sub/')===0){$path='/subs/'.substr($path,5);}
return "{$scheme}://a.{$domain}{$path}{$query}{$fragment}";
}
$links=array();
$links[]='domain.com/sub/code/name';
$links[]='domain.com:20/sub/code/name';
$links[]='www.domain.com/sub/code/name';
$links[]='http://domain.com/sub/code/name';
$links[]='http://www.domain.com/sub/code/name';
$links[]='https://domain.com/sub/code/name';
$links[]='sub.domain.com/sub/code/name';
$links[]='domain.com/sub/code/name?a=1&b=2#c';
echo '<pre>';
foreach($links as $link)
{
echo str_pad($link, 40,' ',STR_PAD_RIGHT).'=> '.convertLink($link)."\n";
}
echo '</pre>';
Output:
domain.com/sub/code/name => http://a.domain.com/subs/code/name domain.com:20/sub/code/name => http://a.domain.com:20/subs/code/name www.domain.com/sub/code/name => http://a.domain.com/subs/code/name http://domain.com/sub/code/name => http://a.domain.com/subs/code/name http://www.domain.com/sub/code/name => http://a.domain.com/subs/code/name https://domain.com/sub/code/name => https://a.domain.com/subs/code/name sub.domain.com/sub/code/name => http://a.sub.domain.com/subs/code/name domain.com/sub/code/name?a=1&b=2#c => http://a.domain.com/subs/code/name?a=1&b=2#c