我正在借用w3schools.com的代码来验证名称。不幸的是,正则表达式只允许字母和空格。如何修改此代码,以便像O'Shaughnessy这样的名称不会产生错误消息?另外,我的一般代码的另一部分是导致用户输入出现在MySQL上,反斜杠是不打算的。我曾使用mysqli_real_escape_string来防止SQL注入攻击,我相信这就是为什么反斜杠出现在数据中的原因。我该如何摆脱它?
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "Name is required";
} else {
$name = test_input($_POST["name"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$name = "";
$nameErr = "Only letters and white space allowed";
}
}
}
答案 0 :(得分:1)
打击SQL注入的最佳方法是完全抛弃mysqli_real_escape_string
并使用预处理语句。这样,您不必担心清理字符串,直到之后想要显示它们。准备好的语句可以与mysqli
和PDO
一起使用,实质上意味着您可以单独发送查询和数据。这意味着用户无法更改您的查询。
至于名字;首先考虑一下你是否真的要验证它。有一些奇怪的名字,验证它们在大多数时候并不是很有用。不过,如果这是你想要的方式,你所要做的就是确保'包含在你的正则表达式中。像这样:
<强>原始强>
/^[a-zA-Z ]*$/
<强>编辑:强>
/^[a-zA-Z' ]*$/
那就是它。一个小的补充,然后你是金色的。而且你会以他们的名字惹恼变形虫的人。或数字。