【问题标题】:PHP pathinfo gets fooled by url in query string, any workaround?PHP pathinfo 被查询字符串中的 url 愚弄,有什么解决方法吗?
【发布时间】:2011-03-02 02:30:23
【问题描述】:

我正在开发一个小函数来接收一个 url 并根据它所在的位置返回一个相对路径。

如果 url 在查询字符串中包含路径,pathinfo 会返回错误的结果。下面的代码证明了这一点:

$p = 'http://localhost/demos/image_editor/dir_adjuster.php?u=http://localhost/demos/some/dir/afile.txt';
$my_path_info = pathinfo($p);
echo $p . '<br/><pre>';
print_r($my_path_info);
echo '</pre>';

该代码输出:

http://localhost/demos/image_editor/dir_adjuster.php?u=http://localhost/demos/some/dir/afile.txt

Array
(
    [dirname] => http://localhost/demos/image_editor/dir_adjuster.php?u=http://localhost/demos/some/dir
    [basename] => afile.txt
    [extension] => txt
    [filename] => afile
)

这显然是错误的。有什么解决方法吗?

【问题讨论】:

    标签: php pathinfo


    【解决方案1】:

    有什么解决方法吗?

    是的,这样做right ;)

    $url = urlencode('http://localhost/demos/some/dir/afile.txt');
    $p = 'http://localhost/demos/image_editor/dir_adjuster.php?u='.$url;
    

    对于 URL,尤其是那些带有查询字符串的 URL,parse_url() 应该更可靠地提取路径组件;之后,运行pathinfo()就可以了。

    【讨论】:

    • 谢谢!这让[dirname] 正确,这给我带来了麻烦,但[extension] 和[filename] 仍然不正确。无论如何,我的问题已经解决了,因为我担心 [dirname],但我会将这个问题留一个小时,看看是否有人可以正确处理所有组件。
    • @Majid 啊,当然是网址。 parse_url() 应该更好地工作:php.net/parse_url
    • 谢谢佩卡。是的!所以,我首先使用 parse_url() 来获得一个正确的path,然后我会在其上使用 pathinfo()。您可能希望将您的解决方案合并到您的答案中,以便以后阅读本文的人更有用,但如果您认为不值得付出努力,我会编辑问题并包含您的方法。
    • @Majid 没问题!我添加了信息;如果您有一些示例源代码,请随时添加。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 2012-11-02
    • 1970-01-01
    • 2019-01-20
    • 2014-11-30
    • 2017-07-20
    相关资源
    最近更新 更多