2012-07-16 44 views
0

我在我的網址這個網址查詢參數解析,最好的選擇

http://www.test.com/[email protected]&tid=RetEm_Welcome_resp_05232012 

問題ISN,它不是

http://www.test.com/?email = [email protected]&tid=RetEm_Welcome_resp_05232012 

notice email = [email protected] 

,所以我不能做$_GET['email'] 我如何能得到的電子郵件從上面的字符串地址?

+1

如果您無法控制這些來電,但如果您知道電子郵件將始終是第一部分,您可能需要考慮使用mod-rewrite來捕獲該電子郵件地址併爲其提供內部使用的專用名稱。 – 2012-07-16 20:29:17

回答

2

給出的兩個示例都不適用於所需的$_GET['email']

第一個示例http://www.test.com/[email protected]&tid=RetEm_Welcome_resp_05232012對於電子郵件地址沒有「密鑰」,因此獲取它的唯一方法是迭代每個查詢字符串參數,並假定無密鑰值是電子郵件地址或者對其進行正則表達式匹配。東西(非常)基本是:

$email = ''; 
foreach ($_GET as $key => $val) { 
    if (strpos($key, '@') && ($val == '')) { 
     // assume this is an email address 
     $email = $key; 
     break; 
    } 
} 

第二個例子,http://www.test.com/?email = [email protected]&tid=RetEm_Welcome_resp_05232012,在名稱中的「電子郵件」罪狀後的空間。 $email = $_GET['email '];

是否有一個具體原因經常?email=[email address]查詢字符串將無法正常工作:它可以與檢索?

0

您可以通過

$query=$_SERVER['REQUEST_URI']; 

獲得請求的URI的字符串之後,你想

1

你可以解析這個查詢答案很明顯,這是foreach超過$_GET,並期待在一個電子郵件地址鍵。 但是這不起作用,因爲PHP會將電子郵件地址(以及其他可能的字符)中的.轉換爲_字符,以便與register_globals向後兼容。這使得任務有點難度, 但不是不可能的:

就一直在玩它,實際上它不可能的,因爲PHP實際消耗的電子郵件地址.,並將其轉換爲_連當您從$_SERVER['QUERY_STRING']獲得原始查詢字符串時。抱歉。

它可能會與POST請求,因爲我不認爲PHP會修改可以從php://input獲得的數據 - 但如果你可以修改這個,你可能會修改請求的URL,以便它有一個適當的關鍵,這不會是一個問題。

+0

沒有'='所以這一行'explode('=',$ val,2);'失敗 – Constantin 2012-07-16 20:40:19

+0

不,它會返回第一部分並填充鍵。它失敗的原因(這是我的壞)是因爲它應該是'list($ key,$ val)= explode('=',$ data,2);' – DaveRandom 2012-07-16 20:42:54

+1

*但它仍然不起作用,因爲即使從$ _SERVER ['QUERY_STRING']獲得原始查詢,PHP仍然在電子郵件地址中使用'.'。所以簡短的回答是 - 它不能完成。 – DaveRandom 2012-07-16 20:44:13