2010-12-20 38 views
2

我正在創建一個PHP代理,它接受一個URL並確認它在我的服務器列表中。使用PHP來拆分URL

當從應用程序導入網址時,我將它運行到了需要2個解析器標籤的問題。我需要它沿着「\?」分裂。標記以及一個字符串,在我的情況下,「導出?」

我使用preg作爲第一個標記。這是否接受像我的出口標籤的字符串或有沒有其他方法來做到這一點?

請讓我知道這是如何完成,或者如果你有更多的問題。

+1

你到目前爲止嘗試過什麼?你可以添加一些代碼,可能是一些輸入字符串和正在使用的正則表達式? – 2010-12-20 16:20:22

+8

你試過['parse_url'](http://us3.php.net/parse_url)而不是正則表達式嗎? – ircmaxell 2010-12-20 16:21:33

+0

我已經嘗試了包含在原始代理中的preg_split方法。最大的問題源於事實,我的網址就像http://www.domain.com/subfolders/?或http://www.domain.com/subfolders/export? – crazywill32 2010-12-20 16:31:21

回答

0

一個正則表達式應該做的伎倆,像下面的東西會工作。這就是Django使用他們的URL調度

r'^export/$' 
+1

這並沒有太多的幫助。不在模式上分割,只針對不是絕對的URL('^'是行首,'$'是行尾)。 – 2010-12-20 16:31:38

12

由於ircmaxell has already stated in the comments,PHP確實已經有一個函數來分析一個URL:parse_url

當你擁有了URL路徑(我假設你export?路徑後綴加上查詢指標),則可以使用explode的路徑拆分成其路徑段:

$path = parse_url($url, PHP_URL_PATH); 
$segments = explode('/', $path); 

然後,您可以得到最後路徑段與下列之一:

end($segments) 
$segments[count($segments)-1] 

,並應付尾隨斜線,您可以使用rtrim($path, '/')將其刪除。

一起:

$url = 'http://www.example.com/subfolders/export?'; 
$path = parse_url($url, PHP_URL_PATH); 
$segments = explode('/', rtrim($path, '/')); 
echo end($segments); 
+0

這似乎並沒有爲我工作。它不允許我查看示例代碼的結果。如果導出後有JSON字符串,會發生什麼情況? – crazywill32 2010-12-20 16:53:31

+0

@ user548869:哦,是的,你說得對,'array_slice'返回一個數組。改用其他變體之一。 – Gumbo 2010-12-20 16:56:19

0

正則表達式匹配的字符串也可包括變量匹配。因爲?包含在?之內,所以你必須做兩次分裂。首先登錄export?,然後第二遍以?作爲分隔符。如下所述,你只是分裂成兩種不同的字符串。

$first = preg_split('export\?', ...); 
for ($first) { 
     array_push ($second,preg_split('\?', ...)'); 
} 

這不是完全有效的PHP,但我希望它是足夠接近的僞代碼。

0

嘿傢伙我結束了使用查找字符串(導出?)爆炸,然後我用preg split命令來搜索\ ?.這爲我提供了我正在尋找的protion。多謝你們。