2016-02-01 71 views
5

目前我有以下代碼。從爆炸url獲取ID

$file_id = 'https://skyvault.co/show/file?filename=6N2viQpwLKBIA6'; 
$parts = parse_url($file_id); 
$path_parts = explode('/', $parts[path]); 
$secret = $path_parts[3]; 
print $secret; 

在上面,你可以看到,我試圖通過/爆炸,它不回來時,我正在尋找它的輸出只是返回file,我需要它返回6N2viQpwLKBIA6所以我怎麼能拿到ID?

+0

爲什麼不使用'$ _GET ['filename']'? – CodeGodie

+0

@CodeGodie這只是一個需要解析的字符串。 –

+0

哦,我明白了。感謝您指出了這一點。 – CodeGodie

回答

1

如果URL是總是相同所有項目是否可以這樣快速地這樣做?

$URLComp = explode("show/file?filename=", $file_id); 
$secret = $URLComp[1]; 
print $secret; 

主要的原因是,有可能是有或沒有www案件,然後用或不用https

+0

我已經試過了,它似乎沒有工作..它沒有返回任何結果,當我嘗試和我只是用代碼重新編碼,仍然沒有運氣.. – Ritzy

+0

@Ritzy它在這裏工作。檢查:** http://sandbox.onlinephpfunctions.com/code/4950c66a5dec11f6dd98f828d045e11ac207f4c6** –

+1

是的!我得到它的工作我輸入了錯誤的東西,我想,非常感謝你的非常快速的答案,併爲這個愚蠢的問題抱歉! – Ritzy

4

parse_url的作品,但你需要指定query索引。重做這樣的:

$file_id = 'https://skyvault.co/show/file?filename=6N2viQpwLKBIA6'; 
$parts = parse_url($file_id); 
$path_parts = explode('=', $parts['query']); 
$secret = $path_parts[1]; 
print $secret; 
+0

或者更漂亮 - 不使用爆炸:https://3v4l.org/8Y8Se - 使用** ['parse_str'](http://php.net/parse_str)** – CodeBrauer

+0

@CodeBrauer這是真的。 'parse_url'將有助於將它變成一行。謝謝。 – CodeGodie

0

如果你需要使用parse_url以任何理由,你可以使用query組件,而不是作爲pathsuggested by @CodieGodie

但是,如果您使用此URL作爲字符串處理,則可以忽略parse_url並且就像字符串一樣使用它。

$file_id = 'https://skyvault.co/show/file?filename=6N2viQpwLKBIA6'; 
$parts = explode('/', $file_id); 
$lastPart = end($parts); 
$varParts = explode('=', $lastPart);//also explode('?', $lastPart) if you want "filename=" 
$secret = end($varParts); 
print $secret; 

注:此代碼將工作,如果你的字符串始終具有相同的格式,這就是:「https://example.com/path/path/path?varName=varValue」在URL中結束只有1變種。