【问题标题】:Does a string from mySQL match the same string specified manually?来自 mySQL 的字符串是否与手动指定的相同字符串匹配?
【发布时间】:2012-02-29 15:18:28
【问题描述】:

试图在网站上实现 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);

【问题讨论】:

  • 这是您使用的真实代码吗? $userInfo 没有定义在getGravatar() 的范围内。没有 global 关键字可以从全局范围导入变量,并且该函数也没有参数。 $userInfo 来自哪里?

标签: mysql md5 gravatar


【解决方案1】:

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

echo bin2hex($userInfo['email'])

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • "crumrinece@gmail.com" 不包含任何 UTF-8 字符。即使存储在 UTF-8 排序规则中,使用的字符也是 ASCII 兼容的 UTF-8 代码集的一部分
    • 哦,我的话,Kaii 完全正确,我只是忘记在 getGravatar 中将 $userInfo 声明为全局变量。谢谢你。不敢相信我做到了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 2011-10-07
    • 1970-01-01
    相关资源
    最近更新 更多