Vous n'avez pas besoin d'une regex ... juste un peu de patience. Je ne veux pas vraiment écrire le code pour vous, mais juste vérifier si le src commence par http://
, et si non, vous avez comme 3 cas différents.
- Si elle commence par un
/
puis préfixer http://domain.com
- Si elle commence par
..
vous devrez split l'URL complète et hack off pieces jusqu'à ce que le src commence par un /
- Else (il commence par un lettre), le prendre le domaine complet, et strip it down to the last slash puis ajouter l'URL src.
Ou .... paresseux et voler ce script
$url = "http://www.goat.com/money/dave.html";
$rel = "../images/cheese.jpg";
$com = InternetCombineURL($url,$rel);
// Returns http://www.goat.com/images/cheese.jpg
function InternetCombineUrl($absolute, $relative) {
$p = parse_url($relative);
if($p["scheme"])return $relative;
extract(parse_url($absolute));
$path = dirname($path);
if($relative{0} == '/') {
$cparts = array_filter(explode("/", $relative));
}
else {
$aparts = array_filter(explode("/", $path));
$rparts = array_filter(explode("/", $relative));
$cparts = array_merge($aparts, $rparts);
foreach($cparts as $i => $part) {
if($part == '.') {
$cparts[$i] = null;
}
if($part == '..') {
$cparts[$i - 1] = null;
$cparts[$i] = null;
}
}
$cparts = array_filter($cparts);
}
$path = implode("/", $cparts);
$url = "";
if($scheme) {
$url = "$scheme://";
}
if($user) {
$url .= "$user";
if($pass) {
$url .= ":$pass";
}
$url .= "@";
}
if($host) {
$url .= "$host/";
}
$url .= $path;
return $url;
}
De http://www.web-max.ca/PHP/misc_24.php
Parfait merci! – Allansideas
Vous n'avez pas considéré le cas avec la balise BASE: http://www.w3.org/TR/html401/struct/links.html#h-12.4 – Viet
@Viet: Bon point. Pas trop difficile à prendre en compte cependant. – mpen