Php 获取外部网页图像的绝对路径

Php 获取外部网页图像的绝对路径,php,html,dom,Php,Html,Dom,我正在使用bookmarklet,我正在使用htmldom解析器获取任何外部页面的所有照片(正如前面SO-answer所建议的)。我正在正确获取照片,并将其显示在我的书签弹出窗口中。但是我对照片的相对路径有问题 例如,外部页面上的照片源说 照片来源1:img Source='hostname/photos/photo.jpg'-获取照片,因为它是绝对的 照片来源2:img Source='/photos/photo.jpg'-不获取,因为它不是绝对的 我通过当前url工作,我的意思是使用dirn

我正在使用bookmarklet,我正在使用htmldom解析器获取任何外部页面的所有照片(正如前面SO-answer所建议的)。我正在正确获取照片,并将其显示在我的书签弹出窗口中。但是我对照片的相对路径有问题

例如,外部页面上的照片源说

  • 照片来源1:img Source='hostname/photos/photo.jpg'-获取照片,因为它是绝对的

  • 照片来源2:img Source='/photos/photo.jpg'-不获取,因为它不是绝对的

  • 我通过当前url工作,我的意思是使用dirname或pathinfo通过当前url获取目录。但会导致host/dir/(将主机作为父目录)和host/dir/index.php(正确的是,将主机/dir作为父目录)之间出现问题


    请帮助我如何获取这些相关照片???

    '/'应该是基本路径。检查dom解析器返回的第一个字符,如果是“/”,则只需在其前面加上域名。

    “/”应该是基本路径。检查从dom解析器返回的第一个字符,如果它是“/”,则只需在它前面加上域名。

    修复了它(添加了对仅查询字符串的图像路径的支持)

    测试:

    echo make_absolute_path('http://www.example.com/dir/index.php','/photos/photo.jpg')."\n";
    // Outputs: http://www.example.com/photos/photo.jpg
    echo make_absolute_path('http://www.example.com/dir/index.php','photos/photo.jpg')."\n";
    // Outputs: http://www.example.com/dir/photos/photo.jpg
    echo make_absolute_path('http://www.example.com/dir/index.php','./photos/photo.jpg')."\n";
    // Outputs: http://www.example.com/dir/photos/photo.jpg
    echo make_absolute_path('http://www.example.com/dir/index.php','../photos/photo.jpg')."\n";
    // Outputs: http://www.example.com/photos/photo.jpg
    echo make_absolute_path('http://www.example.com/dir/index.php','http://www.yyy.com/photos/photo.jpg')."\n";
    // Outputs: http://www.yyy.com/photos/photo.jpg
    echo make_absolute_path('http://www.example.com/dir/index.php','?query=something')."\n";
    // Outputs: http://www.example.com/dir/index.php?query=something
    
    我认为这应该能够正确处理您可能遇到的所有问题,并且应该大致等同于浏览器使用的逻辑。此外,还应纠正您在使用
    dirname()
    时在带有斜杠的窗口上可能遇到的任何异常情况

    第一个参数是找到
    /
    href
    etc属性的页面的完整URL

    如果有人发现一些不起作用的东西(因为我知道你们都会试图破坏它:-D),请告诉我,我会尝试修复它。

    修复了它(添加了对仅查询字符串图像路径的支持)

    测试:

    echo make_absolute_path('http://www.example.com/dir/index.php','/photos/photo.jpg')."\n";
    // Outputs: http://www.example.com/photos/photo.jpg
    echo make_absolute_path('http://www.example.com/dir/index.php','photos/photo.jpg')."\n";
    // Outputs: http://www.example.com/dir/photos/photo.jpg
    echo make_absolute_path('http://www.example.com/dir/index.php','./photos/photo.jpg')."\n";
    // Outputs: http://www.example.com/dir/photos/photo.jpg
    echo make_absolute_path('http://www.example.com/dir/index.php','../photos/photo.jpg')."\n";
    // Outputs: http://www.example.com/photos/photo.jpg
    echo make_absolute_path('http://www.example.com/dir/index.php','http://www.yyy.com/photos/photo.jpg')."\n";
    // Outputs: http://www.yyy.com/photos/photo.jpg
    echo make_absolute_path('http://www.example.com/dir/index.php','?query=something')."\n";
    // Outputs: http://www.example.com/dir/index.php?query=something
    
    我认为这应该能够正确处理您可能遇到的所有问题,并且应该大致等同于浏览器使用的逻辑。此外,还应纠正您在使用
    dirname()
    时在带有斜杠的窗口上可能遇到的任何异常情况

    第一个参数是找到
    /
    href
    etc属性的页面的完整URL


    如果有人发现一些不起作用的东西(因为我知道你们都会试图破坏它:-D),请告诉我,我会尝试修复它。

    那个“链接”呢?我的意思是'/Popys/xDFa.jpg '只考虑域地址。你也可以试试“/path/pics.jpg”;它对meso起了作用,问题是什么?如何检测字符串是否以
    http://
    /
    开头?该“链接”如何?我的意思是'/Popys/xDFa.jpg '只考虑域地址。你也可以试试“/path/pics.jpg”;它对meso起了作用,问题是什么?如何检测字符串是否以
    http://
    /
    开头?好的,谢谢..你能告诉我当主网站是一个子目录时的情况吗,如……www.yahoo.com/news/。。。。它将返回www.yahoo.com作为域名,因此图像路径检测将失败。通常,您应该始终使用完整的基本路径+图像路径(如您提供的#1示例所示)。只有在img src以“/”开头的情况下,才应该使用完整路径减去第一个正斜杠后的所有内容。因此,www.yahoo.com/finance/AAPL=>www.yahoo.com然后添加img src:“/photos/photo.jpg”。你的DOM解析器是用什么语言编写的?好的,谢谢。你能告诉我当主网站是一个子目录时的情况吗。。。。它将返回www.yahoo.com作为域名,因此图像路径检测将失败。通常,您应该始终使用完整的基本路径+图像路径(如您提供的#1示例所示)。只有在img src以“/”开头的情况下,才应该使用完整路径减去第一个正斜杠后的所有内容。因此,www.yahoo.com/finance/AAPL=>www.yahoo.com然后添加img src:“/photos/photo.jpg”。您的DOM解析器是用什么语言编写的?@Rohit I刚刚添加了几个小补丁:-)@Rohit I刚刚添加了几个小补丁:-)