Поскольку 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']);
Но если вы предпочитаете сохранить свой исходный код, вам нужно всего лишь добавить \\\\
в свой класс символов, чтобы получить буквальную обратную косую черту.