php - 用户名和密码中的 UTF-8

标签 php html

<分区>

社交网站是否应允许在用户名和密码中使用 UTF-8?我真的是 PHP 的新手,我想知道这些事情。我现在正在创建一个小测试项目,并将排序规则设置为 utf8_general_ciSET NAMES utf8。 Everthing 被插入并正确显示像“ÅÄÖ”这样的字符。但是,如果用户名或密码包含这些字符,您将无法登录。为什么?

<?php
if(isset($_POST['loginBtn'])){
//variables 
$username = mb_strtolower(strip_tags(addslashes($_POST['username'])));
$password = strip_tags(addslashes($_POST['password']));
    if(empty($username) || empty($password)){
    $statusM = "Var god och fyll i båda fälten!";   
    }else{
        //$password = hash("sha512", $password);
        include("db.php");
            //the db.php contains the character set and collation set

        $sql = 'SELECT username, password FROM users WHERE username=:username AND password=:password';  
        $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 AND password=:password';
        $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();
        }
    }
}
?>

注意,这是我当前的代码,还没有完成,而且网站是瑞典语的。

最佳答案

Unicode UTF-8 有多种方式来编码一些字符(主要是重音字符)。例如,Å 可以是 U+00C5,但也可以描述为字母 A 后跟 U+030A(意思是“在前一个字符的顶部放一个环”)。我注意到 MySQL 倾向于使用后一种编码来存储内容。但是你可能在非常 SQL 字符串中有以前的 Unicode UTF-8 编码,然后比较将不匹配(因为两个不同的 Unicode UTF-8 编码相同的字符)。在 MySQL 中进行比较时,这是一个非常烦人的问题。因此,您需要做的是规范化您的 Unicode UTF-8,以确保它始终以相同的方式编码字符。查看 PHP 文档中关于 Normalizer::normalize 的示例代码,用于在比较字符串之前规范化您的 Unicode UTF-8:http://www.php.net/manual/en/normalizer.normalize.php

关于php - 用户名和密码中的 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22272621/

相关文章:

php - MySQL 的 Phabricator 配置问题

php - 在 PHP 中解析无效 HTML 的最佳方法

html - Div 空间在 Firefox 和 Chrome 上看起来不同(本地主机甚至不同)

html - 如何仅将移动设备的导航居中? CSS

php - mysqli_num_rows() 期望参数通过同一页面上的早期查询起作用

php - Javascript对应的Jquery中如何绑定(bind)Onclick事件

javascript - 对具有多个实例的每个单个元素的 jQuery 操作

javascript - 多次失去焦点时淡入淡出效果刷新

javascript - 使用 javascript SDK 和应用程序访问 token 获取 Facebook 用户名

javascript - 具有单个描述字段的图像网格,可在单击时更改