Соответствует ли строка из MySQL той же самой строке, указанной вручную? - PullRequest
0 голосов
/ 29 февраля 2012

Попытка реализовать граватар на сайте. Вот код для возврата ссылки на граватар.

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);

Ответы [ 2 ]

0 голосов
/ 29 февраля 2012

Различная кодировка может привести к разным хэшам, даже если строки при отображении выглядят одинаково.Запрос, возможно, возвращает строку Unicode.Проверьте кодировку базы данных и посмотрите на utf8_decode() (или, может быть, iconv() или mb_convert_encoding()) для преобразования адреса при необходимости.*

$email = utf8_decode($userInfo['email']);
0 голосов
/ 29 февраля 2012

Когда вы выводите эхо $userInfo['email'], браузер не будет отображать непечатаемые символы или HTML-код, который может содержать выражение.Вы можете проверить шестнадцатеричный дамп на наличие непредвиденных байтов:

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