2012-02-29 45 views
0

試圖在網站上實施gravatar。這裏是返回gravatar鏈接的代碼。mySQL中的字符串是否與手動指定的字符串匹配?

function getGravatar(){ 
    $email = $userInfo['email']; 
    $trimmed = trim($email); 
    $md5 = md5(strtolower($trimmed)); 
    $gravatar = "http://www.gravatar.com/avatar/" . $md5; 
    return $gravatar; 
} 

上面的代碼不工作,但如果我用$email = "[email protected]";(用的gravatar關聯的電子郵件)取代$email = $userInfo['email'];它的工作。在這兩種情況下,我都回應了$ md5,並發現每種情況下散列值都不相同。

我認爲這意味着我有$ userInfo ['email']的問題,但echo $userInfo['email']印有「[email protected]」。所以我不知道爲什麼這兩個產生不同的散列值。

電子郵件存儲在MySql數據庫中。該代碼生成$ USERINFO:

$query = "select * from users where username = '$username'"; 
$result = mysql_query($query); 
$userInfo = mysql_fetch_array($result); 
+0

這是你正在使用的真正的代碼? '$ userInfo'沒有在'getGravatar()'的範圍內定義。沒有'global'關鍵字可以從全局範圍導入變量,並且該函數也沒有參數。 ''userInfo'從哪裏來? – Kaii 2012-02-29 15:41:06

回答

0

當您迴應$userInfo['email']瀏覽器不會顯示你非打印字符或HTML代碼的表達可能含有。您可以檢查任何意外字節的十六進制轉儲:

echo bin2hex($userInfo['email']) 
0

不同的編碼會導致不同的散列,即使字符串在顯示時看起來相同。該查詢可能會返回一個unicode字符串。檢查數據庫編碼並查看utf8_decode()(或者可能是iconv()mb_convert_encoding())以在必要時轉換地址。

$email = utf8_decode($userInfo['email']); 
+0

「[email protected]」不包含任何UTF-8字符。即使存儲在UTF-8歸類中,所使用的字符也是ASCII兼容UTF-8代碼集的一部分 – Kaii 2012-02-29 15:55:22

+0

哦,我的話,凱伊是絕對正確的,我只是忘了將$ userInfo聲明爲全局內部的getGravatar。謝謝。不能相信我做到了。 – 2012-02-29 16:47:51

相關問題