2009-07-21 35 views
2

我想抓取img src与php,我可以得到src罚款,但如果src不包括完整的路径,那么我不能真正重用它。有没有办法使用PHP(浏览器可以得到它,如果你使用右键菜单)抢图像的完整路径。刮完整图像src与PHP

即。如何在以下两个示例之一中获得包含域的完整路径?

src="../foo/logo.png" 
src="/images/logo.png" 

感谢,

艾伦

回答

3

你并不需要一个正则表达式...只是一些耐心。我真的不想为你编写代码,只是检查src是否以http://开头,如果不是,你就有3种不同的情况。

  1. 如果它以/开始,那么在前面加上http://domain.com
  2. 如果与..开始到SRC与/
  3. 否则开始你就必须split完整网址和hack off pieces(它开始用字母),取整个域名,然后strip it down to the last slash然后附加src URL。

或者....偷懒偷这个脚本

$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; 
} 

http://www.web-max.ca/PHP/misc_24.php

+0

完美谢谢! – Allansideas 2009-07-22 02:41:31

2

除非你有你开始与该网站的URL(在这种情况下,可以把它放在到src属性的值),它看起来像你'剩下的就是一个字符串。

我假设你没有访问当然任何其他信息。如果你解析HTML,我会假设你必须能够访问一个绝对的URL至少HTML页面,但也许不是。

+0

呀,有人进入网址为一种形式,它是biffed到这个脚本,它夹头东西进入一个数据库,这是从另一个页面调用的,所以我可以预先考虑域,但我想知道是否有更优雅的解决方案。正则表达式并不是我最喜欢的通行时间。 – Allansideas 2009-07-21 23:08:13