Я пытаюсь удалить все специальные символы, например
() [] {} ~ `@ # $% ^ & * _ + = / |. ,،;: ?؟> <
Но этот код удалит весь специальный символ плюс неанглийский символ, я хочу удалить только специальный символ, а не английский. Я означает, что принимаю только английский + не английский, но не специальный символ.
preg_replace("/[^A-Za-z0-9\-]/", "-", $_REQUEST["title"]);
2 ответа
Используйте свойство unicode:
preg_replace("/[^\p{L}\p{N}]/u", "-", $_REQUEST["title"]);
Это заменит любой символ, не являющийся буквой и не цифрой, на тире.
Редактировать согласно комментарию:
$regex = array('/[^\p{L}\p{N}\s]/u', '/\s/');
$repl = array('', '-');
preg_replace($regex, $repl, $_REQUEST["title"]);
В результате обсуждения в комментариях это может помочь вам начать:
<?php
$subject = "This is a string ()[]{}~`@#\$%^&?؟*_+=/|.,،;:' getting stripped.";
$pattern = sprintf('/[%s]/', preg_quote("()[]{}~`@#$%^&?؟*_+=/|.,،;:'", '/'));
$subject = preg_replace($pattern, '', $subject);
echo $subject."\n";
О предотвращении внедрения sql вы также упомянули: как сказано в комментариях к вопросу, вы должны использовать современный адаптер базы данных (mysqli или PDO) и «подготовленные операторы». Вы найдете объяснение этого в документации. Все остальное - это «лишь немного исправить проблему», что вообще не имеет смысла.
Похожие вопросы
Связанные вопросы
Новые вопросы
php
PHP — это широко используемый язык сценариев общего назначения с открытым исходным кодом, мультипарадигмальный, динамически типизированный и интерпретируемый, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.