2013-03-06 34 views
3

的具體部分得到這個東西的用戶來我的網站,他們有變量,每一次的URL新的,但結局總是一樣 /DP /隨機ID/

http://mywebsite.com/?source=text&keyword=site.com/random-text/dp/10505/ 

那麼我想保存爲/ DP /這個ID /我想過用喜歡的東西:

$keywword = $_GET['keyword']; 

而一些如何提取隨機ID喜歡在正則表達式,你可以找到之間是什麼/ dp /和/並保存到像$ id這樣的變量以便稍後可以使用它。

+1

我會說你需要以有效的URL。查詢字符串中不允許使用空格,所以如果您的隨機文本具有這些或其他不允許的字符,則無論選擇哪種方式都可能會中斷。 – jeroen 2013-03-06 14:25:46

+0

@ jeroen這是我自己改變的文本 - 所以這是我的錯!不知道:) – 2013-03-06 14:26:52

+1

如果你的查詢sting編碼正確,你可以使用前兩個解決方案中的任何一個。 – jeroen 2013-03-06 14:29:48

回答

10

你可以這樣做:

$keyword = $_GET['keyword']; 
$foo  = explode('/', $keyword); 
$id  = $foo[3]; 

DEMO: http://codepad.org/CcOcwDa6


我也打算提出一個正則表達式的解決方案:

preg_match('/dp\/([^\/]+)\//', $url, $matches); 
$id = $matchs[1]; 

對正則表達式的解決方案的好處是如果你的keyword參數有變化,這應該仍然工作因爲您要查找的身份證前面有dp/

DEMO: http://ideone.com/xqXU2b

+0

這很好!所以這就像檢查第三個「/」並且在它之後放棄一切?最後一個呢?結果會是這樣嗎? 10505 /或10505(我需要沒有/) – 2013-03-06 14:29:37

+0

你剛剛得到的號碼。下面是一個演示:http://codepad.org/CcOcwDa6 – 2013-03-06 14:35:58

+1

它將'$ _GET ['keyword']'的值轉換爲由'/'分隔的值的數組;在這種情況下,10505是價值。由於'/'是分隔符,'$ foo [3]'不應該顯示爲'10505 /',而是'10505'。如果你發現自己需要刪除字符,你可以使用['str_replace'](http://php.net/manual/en/function.str-replace.php)。 – 2013-03-06 14:38:07

5

或用正則表達式:

if (preg_match('/^.*\/dp\/([0-9]+)\/?$/i', $_GET['keyword'], $matches)) 
    var_dump($matches[1]); 
+0

我可以看到你有0-9這意味着它不會檢測到字母?對不起,我只包括數字,但有時他們得到像A1512B23這樣的信是隨機的:) – 2013-03-06 14:31:02

+3

@MarkVoidale在這種情況下,你可以用'\ w +'代替'[0-9] +' – hjpotter92 2013-03-06 14:35:36

1

也許這將這樣的伎倆:

$keyword = $_GET['keyword']; 
$id = preg_replace('#^(?:.+)?\/dp\/([0-9]+)\/(?:.+)?$#', '$1', $keyword); 
+0

我可以看到你有0 -9這意味着它不會檢測到字母?對不起,我只包含了數字,但有時他們得到了像A1512B23這樣的字母,它是隨機的:) – 2013-03-06 14:31:33

+1

如果您有字母,只需通過'[a-z0-9]'更改'[0-9]''。這會給你:'$ id = preg_replace('#^(?:。+)?\/dp \ /([a-z0-9] +)\ /(?:。+)?$#i', '$ 1',$關鍵字);'(由於可能出現的情況,我在'#之後添加了選項'i') – Yoone 2013-03-06 14:34:01