php中的登录表单问题,删除特殊字符但接受希腊字母


Issues with Login Form in php, Removing Special Characters but accepting greek letters

我正在为我的网站制作注册/登录表单,但我遇到了一个问题。。。尝试使名称和姓氏形式的输入字符串尽可能干净。我尝试了许多预制函数来搜索字符串,不允许用户使用特殊字符,如@#$%^&(){}"等,但当用户用希腊字符写自己的名字或姓氏时,如果没有特殊字符,函数会读取特殊字符。下面是代码:

$required_fields = array('name', 'surname', 'email', 'password', 'confirm_password');
$wrong_chars = "0123456789!@#$%^&*()+=-[]';,./{}|:<>?~";
foreach($required_fields as $field) {
        if($_POST[$field] == '') {
          $errors[] = "All Fields are required.";
          break;
        }
    }   
     if(empty($errors)) {
         if(strpbrk($name,$wrong_chars) !== false) {
           $errors[] = "You can't use special characters on field: Name.";  
         }
         else if(strpbrk($surname,$wrong_chars) !== false){
             $errors[] = "You can't use special characters on field: Surame.";
         }
     }

如果这里有任何帮助,如果有任何关于更好算法的建议,我们将不胜感激。提前谢谢。

你不能有这种方法,因为很多成员的名字都有特殊字符,但如果你想这样做,你可以使用ctype_alnum()函数,如下所示:

$user = array();
$required_fields = array('name', 'surname', 'email', 'password', 'confirm_password');
foreach($required_fields as $field) {
    if(!array_key_exists($field,$_POST) || empty($_POST[$field])) {
        $errors[] = "$field field are required.";
    } else {
        $user[$field] = htmlentities($_POST[$field],ENT_QUOTES,'UTF-8');
    }
}   
$user = (object)$user;
if(empty($errors)) {
    if(!ctype_alnum($user->name)) {
        $errors[] = "You can't use special characters on field: Name.";  
    } elseif(!ctype_alnum($user->surname)) {
        $errors[] = "You can't use special characters on field: Surame.";
    }
}
var_dump($errors);