對於我的電子郵件確認腳本,我通過使用現有的單向加密功能運行用戶的電子郵件地址,然後從中間抓取20個字符來生成令牌。我以$ _GET變量或$ _POST變量的形式從用戶那裏獲取令牌。我遇到了一個「錯誤」,其中當輸入的電子郵件地址中有一個加號(+),然後該標記作爲$ _GET變量從用戶處取回時,加號會轉換爲空格,並且哈希變化,因此令牌不再匹配。
所以,我想知道什麼是解決這個問題的最佳方法是什麼?逃避加號?轉換加號? URL編碼?當我使用$ _GET時,會發生哪些其他字符?
下面是相關的代碼,如果它是有幫助的:
<?php
if (isset ($_GET['email'], $_GET['token'])) {
$email = strtolower (mysql_real_escape_string($_GET['email']));
$token = mysql_real_escape_string($_GET['token']);
$correctToken = substr (doEncrypt ($email), -26, -6);
}elseif (isset ($_POST['submit'])) {
$email = strtolower (mysql_real_escape_string($_POST['email']));
$token = mysql_real_escape_string($_POST['token']);
$correctToken = substr (doEncrypt ($email), -26, -6);
}
if (isset ($email, $token, $correctToken)){
if ($token == $correctToken) {
// Confirm user's email!
}
}
?>
非常感謝您! Billy
編輯:好的,所以在這一點上最大的問題是,加號是通過$ _GET檢索時轉換爲空格的唯一字符?如果是這樣,那麼看來我可以在$ _GET部分添加它:$email = str_replace(' ', '+', $email);
在電子郵件地址中沒有其他的原因,對吧?再次
感謝, 比利
是的,['urlencode'](http://php.net/urlencode)將是最合適的(在每個電子郵件發送該URL之前)。 – mario 2012-01-15 04:57:25
可能重複的[PHP的加號查詢](http://stackoverflow.com/questions/2671840/php-plus-sign-with-get-query) – mario 2012-01-15 05:00:27
可能的重複[在PHP中提交字符串時數據庫應該照顧非法字符使用htmlspecialchars()或使用正則表達式?](http://stackoverflow.com/questions/2993027/in-php-when-submitting-strings-to-the-database-應該 - 我非常重視) – 2012-01-15 05:32:28