我正在尝试验证表单字段。
if (empty($_POST["title"])) {
$titleErr = "A title is required";
} else {
$title = test_input($_POST["title"]);
if (!preg_match("/^[a-zA-Z0-9 &'-]*$/",$title)) {
$titleErr = "Only letters numbers spaces &'- allowed";
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
如果有"&"我会收到错误在$ title中。我尝试过使用" \&"并改变顺序,但无济于事。
答案 0 :(得分:0)
作为mentioned,htmlspecialchars将&
替换为&
,即其html表示形式。反过来,分号字符使/^[a-zA-Z0-9 &'-]*$/
正则表达式失败。
目前还不太清楚你想要实现的目标,但是如果你试图用sql在数据库中插入值,请使用PDO和参数化查询来防止sql注入,而不是-baked sanitization函数最终不能防止sql注入。
在任何情况下,您都可以删除该test_input函数,它既不会服务也不会达到任何目的。