我正在收集表单数据,并通过AJAX调用将其发送到PHP验证脚本。问题是在特殊字符的PHP验证脚本没有按预期工作。通过AJAX将特殊字符传递给PHP

HTML:

placeholder="[first name]" required autofocus maxlength="25" size="25" />

JS:

$(".button").click(function() {

var firstName = encodeURIComponent($("input.firstName").val());

var datastring = "firstName=" + firstName;

$.ajax({

type: "POST",

url: "/scripts/validateSignup.php",

data: datastring,

cache: false,

success: function (errorMessage) {

//print to screen

}

});

});

PHP验证

$postData = $_POST;

if (Filter::validateString($postData['firstName']) == false) {

echo "Oops! Some characters used in your first name are not valid.";

}

PHP过滤

//Returns true if string is good, false otherwise

public static function validateString($string) {

$string = trim($string);

if ($string == null || $string == "") {

return false;

} else {

if (preg_match("/[^\.\,\-\_\'\"\@\?\!\:\;\$\#\%\&\+\= a-zA-Z0-9()]/", $string) == true) {

return false;

} else {

return true;

}

}

}

在一个空字符串它打印错误筛选就好了。但是,如果我做了类似“〜!@#$%^ & *()”的操作,那么它会接受字符串为好,并且不会抛出错误,即使preg_match == false的结果。

+1

[文档](http://php.net/manual/en/function.preg-match.php):_preg_match()返回1,如果模式匹配给定的主题,则返回0,如果不匹配,则返回0,如果发生错误,则为FALSE._您是否尝试过比较'!= 0'而不是 –

+0

@davidkonrad:很好知道,但仍然不是预期的结果我确信validateString返回false,但if条件isn t接受它... –

+0

从pregmatch 该函数可能返回布尔FALSE,但也可能返回一个非布尔值,其中 评估为FALSE。有关更多信息,请阅读布尔部分。使用=== 运算符来测试此函数的返回值。 尝试使用===而不是== –

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐