Предыдущий ответ вызовет проблемы с вашим первым и четвертым примером, потому что он не включает косую черту, чтобы отделить страницу от имени страницы.По общему признанию это можно исправить, просто добавив его в $ domain, но если вы сделаете это, то href = "/thing.php" в итоге получит два.
Просто чтобы дать альтернативное решение Regex, вы можете использовать что-то вроде этого ...
$pattern = '#'#(?<=href=")(.+?)(?=")#'';
$output = preg_replace_callback($pattern, 'make_absolute', $input);
function make_absolute($link) {
$domain = 'http://domain.com';
if(strpos($link[1], 'http')!==0) {
if(strpos($link[1], '/')!==0) {
return $domain.'/'.$link[1];
} else {
return $domain.$link[1];
}
}
return $link[1];
}
Однако стоит отметить, что с такой ссылкой, как href = "example.html"ссылка относится к текущему каталогу, пока ни один из указанных методов не будет работать правильно для относительных ссылок, которые не находятся в корневом каталоге.Чтобы предоставить решение, которое, хотя и потребует больше информации о том, откуда эта информация пришла.