2014-02-06 27 views
-1

我有一個$_GET變量,它是md5('currentdate') + ID +另一個加密的隨機字符串的組合。希望通過這個,我可以以某種方式保護我的網址。

實例網址:

create_pdf.php?goto=qredit&qrid=1e02b73e2b1cb88685499f38508cf6e84317e62166fc8586dfa4d1bc0e1742c08b 
                   ^^ 

我需要得到$_GET['qrid']變量,在這種情況下是43的中間。 我嘗試使用substr(),但我沒有得到我想要的結果。

UPDATE: 下面是如何得到我的$_GET變量。

<a href="create_pdf.php?goto=qredit&qrid=<?php echo md5($today).$_GET['qrid'].md5($_GET['qrid']); ?>" target="_blank" id="upload_button">-random whatnot-</a> 
+0

*不是字符串的一部分。我試圖讓它大膽,所以你可以看到它在哪裏。 – witherwind

+0

我是新來的。我爲我的錯誤道歉。 – witherwind

+0

是第二個加密字符串的長度是否固定?如果是這樣,你可能不得不使用if-else來找到中間部分。使用md5的 – lovetostrike

回答

0

假設第一和第二字符串是一個固定的32個字符,嘗試這從字符串檢索的ID值:

// Get all characters up to the last 32 chracters, starting at 32nd character 
$id = substr($_GET['qrid'], 32, strlen($_GET['qrid'])-64); 
+0

這也是我的第一個解決方案。但是,ID並不總是2個字符。未來可能會更多。 – witherwind

+1

@ user3277936「另一個加密的隨機字符串」是固定的長度嗎?如果是這樣,有多少個字符? –

+0

它也是md5。所以它是32. – witherwind

0

可以使用正則表達式對清潔溶液。假設它是MD5,前端和末尾字符串總是32。中間捕獲組將從0開始獲得您的ID。

preg_match('/\d{32}(\w+)\d{32}/', $_GET['qrid'], $matches); 
$id = $matches[1]; 
+0

你知道他們說什麼,「如果你試圖用正則表達式解決問題,你有兩個問題。」乾杯。 :) –

+0

是的,不應該過度使用它,我認爲這對輕量級的東西很方便 – lovetostrike