2010-06-10 48 views
2

我正在研究一個小函數來接收一個url並根據它駐留的位置返回一個相對路徑。PHP pathinfo被quert字符串中的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 
) 

這顯然是錯誤的。任何解決方法?

回答

7

任何解決方法?

是的,這樣做right

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

和網址,尤其是那些與查詢字符串,parse_url()應更可靠提取路徑分量;之後,在其上運行pathinfo()

+0

謝謝!這得到'[dirname]'正確,這給我帶來了麻煩,但'[extension]'和'[filename]'仍然不正確。無論如何,我的問題已經解決了,因爲我擔心'[dirname]',但是我會讓問題開放一個小時,看看是否有人能夠正確地獲取所有組件。 – 2010-06-10 10:27:39

+0

@Majid啊,當然,這是一個網址。 parse_url()應該更好地工作:http://www.php.net/parse_url – 2010-06-10 10:31:48

+0

謝謝Pekka。是!所以,我首先使用parse_url()來獲得一個合適的'path',然後我會使用pathinfo()。您可能希望將您的解決方案整合到您的答案中,以便稍後閱讀此答案的人更有用,但如果您覺得不值得付出努力,我會編輯該問題幷包含您的方法。 – 2010-06-10 11:31:28