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