0

试图在网站上实现 gravatar。这是返回 gravatar 链接的代码。

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

上面的代码不起作用,但如果我替换$email = $userInfo['email'];$email = "crumrinece@gmail.com";(与 gravatar 关联的电子邮件),它确实有效。在这两种情况下,我都回显了 $md5,并发现每种情况下的哈希值都不同。

我认为这意味着我在使用 $userInfo['email'] 时遇到了问题,但echo $userInfo['email']打印了“crumrinece@gmail.com”。所以我不知道为什么两者会产生不同的哈希值。

电子邮件存储在 MySql 数据库中。生成 $userInfo 的代码:

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

2 回答 2

0

当您回显时$userInfo['email'],浏览器不会向您显示表达式可能包含的不可打印字符或 HTML 代码。您可以检查十六进制转储是否有任何意外字节:

echo bin2hex($userInfo['email'])
于 2012-02-29T15:37:32.660 回答
0

即使字符串在显示时看起来相同,不同的编码也会导致不同的哈希值。查询可能会返回一个 unicode 字符串。检查数据库编码,并在必要时查看 utf8_decode()(或可能iconv()或)转换地址。mb_convert_encoding()

$email = utf8_decode($userInfo['email']);
于 2012-02-29T15:48:18.413 回答