Я пытаюсь очистить img src с помощью php, я могу получить src fine, но если src не включает полный путь, то я не могу его повторно использовать повторно. Есть ли способ захватить полный путь изображения с помощью php (браузеры могут получить его, если вы используете меню правой кнопки мыши).
то есть. Как получить полный путь, включая домен, в одном из следующих двух примеров?
src="../foo/logo.png" src="/images/logo.png"
Благодаря,
Аллан
Вам не нужно регулярное выражение … просто терпение. Я действительно не хочу писать код для вас, но просто проверьте, начинается ли src с http://
, а если нет, у вас есть 3 разных случая.
/
then prepend http://domain.com /
Или … быть ленивым и украсть этот скрипт
$url = "http://www.goat.com/money/dave.html"; $rel = "../images/cheese.jpg"; $com = InternetCombineURL($url,$rel); // Returns http://img.ruphp.com/php/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; }
Если у вас нет URL-адреса сайта, с которого вы начинаете (в этом случае вы можете добавить его к значению атрибута src), похоже, что все, что осталось, есть строка.
Я предполагаю, что вы, конечно, не имеете доступа к какой-либо дополнительной информации. Если вы разбираете HTML, я бы предположил, что вы должны иметь доступ к абсолютному URL-адресу, по крайней мере, к HTML-странице, но, возможно, нет.