【问题标题】:PHP - How to get a file name from url stringPHP - 如何从 url 字符串中获取文件名
【发布时间】:2013-11-07 18:48:18
【问题描述】:

这是对这个问题的跟进Use PHP to Get File Path/Extension from URL string

给定一个作为 URL 的字符串:http://i.imgur.com/test.png&stuff

如何获取文件名:test.png 不带查询参数?

如果我尝试建议的解决方案:parse_url($url, PHP_URL_PATH) 我会得到/test.png&stuff

【问题讨论】:

    标签: php


    【解决方案1】:
    parse_url($url, PHP_URL_PATH) I get /test.png&stuff
    

    那是因为你给它一个不包含查询字符串的 URL。你的意思是/text.php?stuff查询字符串? 定义,而不是&& 用于附加附加变量。

    要提取查询字符串,您需要PHP_URL_QUERY,而不是PHP_URL_PATH

    $x = "http://i.imgur.com/test.png?stuff";
    
    parse_url($x, PHP_URL_QUERY); # "stuff"
    

    【讨论】:

    • 不幸的是,这是用户输入。因此,用户可能会在浏览器中输入一个无效的 URL,例如 i.imgur.com/YsSs2FK.png&stuff...
    • 然后告诉他们他们的输入无效。如果他们向您提供了错误的输入,您应该告诉他们这是错误的输入,而不是试图猜测他们要输入的内容。对于您的 imgur 链接,&stuff 没有执行任何操作,因此您可能不需要提取任何内容。
    【解决方案2】:

    不幸的是,它没有使用普通的 URL 字符串,因为它没有 ?分离出查询字符串。您可能想尝试同时使用几个不同的功能:

    $path = parse_url($url, PHP_URL_PATH);
    $path = explode('&',$path);
    $filename = $path[0]; // and here is your test.png
    

    【讨论】:

      【解决方案3】:

      基于@Mark Rushakoff的回答最佳解决方案:

      <?php
      $path = "http://i.imgur.com/test.png?asd=qwe&stuff#hash";
      $vars =strrchr($path, "?"); // ?asd=qwe&stuff#hash
      var_dump(preg_replace('/'. preg_quote($vars, '/') . '$/', '', basename($path))); // test.png
      ?>
      
      1. Regular Expression to collect everything after the last /
      2. How to get file name from full path with PHP?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-11
        • 2012-11-22
        • 2011-11-17
        • 1970-01-01
        • 1970-01-01
        • 2012-02-11
        • 2011-10-23
        相关资源
        最近更新 更多