我无法获得pregmatch来接受单引号(')或双引号(“)引号。我正在php中尝试将模式置于“ textarea”中。
我想允许两种引号类型,但都不接受。因此,请停止输入数据库。
我的模式是
pattern="[a-zA-Z0-9.,()'!?:"\s]"
我的预赛是
!preg_match("/^[a-zA-Z0-9.,()'!?:"\s]*$/", $description)
我已经搜索并尝试了所有内容。
当我尝试这个
"/^['\a-zA-Z0-9.,()!?:\s]*$/"
它返回丽莎的而不是丽莎的
答案 0 :(得分:0)
Filter the input,然后运行检查以确保您没有存储malicious bit of HTML or Javascript, or a tag breaker。然后,一旦您进入binding your parameters with PDO进行插入,请将其表示为PARAM_STR。
$description = filter_input(INPUT_POST,'description',FILTER_SANITIZE_STRING);
if(preg_match("~^[a-zA-Z0-9.,()\"'!?:\s]*$~", $description)){
//Call functions to prepare statements and insert into db here.
//...
$stmt->bindValue(':description', $description, PDO::PARAM_STR);
}
答案 1 :(得分:0)
由于您的preg匹配现在允许单引号,因此在插入数据库之前,请保留它并删除斜杠。
尝试一下:
!preg_match("/^['\a-zA-Z0-9.,()!?:\s]*$/", $description))
然后在将参数绑定到准备好的语句中之前,添加以下代码行:
$description = stripslashes(htmlentities($description));
@John Conde是正确的。确保始终使用准备好的语句并绑定参数。
希望这很有帮助