ÅÄÖ的用户名和密码

时间:2014-03-09 13:19:56

标签: php html character-encoding

我不确定问题取决于什么,因为我是PHP的新手。下面的代码片段会检查用户名和密码是否与数据库中的用户名和密码匹配。数据库具有utf8_general_ci且脚本具有UTF-8但是当它检查它们是否匹配时,它无法识别ÅÄÖ。为什么会这样?我已经阅读了很多这样的帖子,但我找不到解决方案。

摘录:

<?php
if(isset($_POST['loginBtn'])){
//variables 
$username = mb_strtolower($_POST['username']);
$password = $_POST['password'];

    if(empty($username) || empty($password)){
    $statusM = "Var god och fyll i båda fälten!";   
    }else{
        //$password = hash("sha512", $password);

        /*
        $options = array('cost' => 12);
        $password = password_hash($password, PASSWORD_BCRYPT, $options);
        */


        include("db.php");
        $sql = "SELECT * FROM users WHERE username=:username COLLATE utf8_bin AND password=:password COLLATE utf8_bin";
        $stmt = $db->prepare($sql);
        $stmt->bindParam(":username", $username);
        $stmt->bindParam(":password", $password);
        $stmt->execute();
        if(!$stmt->rowCount() > 0){
        $statusM = "Antingen fel lösenord eller användarnamn!"; 
        }else{

        $sql = 'SELECT * FROM users WHERE username=:username COLLATE utf8_bin AND password=:password COLLATE utf8_bin';
        $stmt = $db->prepare($sql);     
        $stmt->bindParam(":username", $username);
        $stmt->bindParam(":password", $password);
        $stmt->execute();
        $stmt->setFetchMode(PDO::FETCH_ASSOC);
        $row = $stmt->fetch();

        session_start();
        $_SESSION['school'] = $row['school'];
        $_SESSION['firstname'] = $row['firstname'];
        $_SESSION['lastname'] = $row['lastname'];
        $_SESSION['username'] = $row['username'];
        $_SESSION['password'] = $row['password'];
        $_SESSION['email'] = $row['email'];
        header("Location: member_home.php");
        exit();
        }
    }
}
?>

注意 *代码未完成且网站为瑞典语。

问题:

  1. 为什么我不能在用户名或密码包含ÅÄÖ
  2. 时进行比较
  3. 问题出在哪里,在MYSQL或PHP中?

1 个答案:

答案 0 :(得分:0)

因此,关于mb_strtolower(),请尝试运行此脚本,并查看差异:

$statusM = "Var god och fyll i båda fälten!"; 
echo mb_strtolower($statusM);
echo mb_strtolower($statusM, 'UTF-8');