我正在尝试从textarea接收值,我需要允许它接受换行符。
我已经在模式之后尝试过/ s和/ m标志。 还有\ r \ n和\ s例外。
以上内容均无济于事。
$description = mysqli_real_escape_string($conn, $_POST['description']);
if(!preg_match("/^[\r\n\/a-z A-ZáéíóúàèìòùãõâêîôûÁÉÍÓÚÀÈÌÒÙÃÕÂÊÎÔÛçÇ 0-9 \- \_ \s \. ,]*$/", $description)) {
header("Location: index.php?error=invalidDescription");
exit();
}
我希望它接受换行符。
答案 0 :(得分:4)
由于mysqli_real_escape_string
转义了换行符,因此字符串中不再有换行符。模式中的字符类不包含反斜杠,这就是模式失败的原因。
最简单的解决方案是在模式之后应用mysqli_real_escape_string
。我将这样写:
if ( preg_match('~[^\p{Latin}0-9/\s.,_-]~u', $_POST['description']) ) {
header("Location: index.php?error=invalidDescription");
exit();
}
$description = mysqli_real_escape_string($conn, $_POST['description']);
但是,如果您希望保留原始代码,则只需在字符类中添加\\\\
即可得出文字反斜杠。