Удалить все HTML-специальные символы


Перед сохранением входных данных от пользователей в базе данных, я использую ниже функция заменить все HTML специальные символы. Все мои пользователи всегда будут использовать английский язык.

Вариант 1

function clean($var) {
  $regEx="/[^a-zA-Z0-9 -_]/"; 
  $var = preg_replace($regEx, "", $var);
  return $var;
}

Я хочу, чтобы пользователи могли хранить только

  • Буквы (A до Z) (без учета регистра)
  • Цифры (от 0 до 9)
  • Пробел, Тире, Подчеркивания

Будет выше функция хороша для этой работы, или мне следует использовать более эффективные функции/встроенный в PHP?

Это, как я использую функцию.

$userInput = htmlspecialchars(clean($userInput));

Вариант 2

function h($str_to_encode = ""){
    // Pregmatch will replacte all HTML characters with Empty string
    return preg_replace("/&#?[a-z0-9]{2,8};/i","", htmlspecialchars($str_to_encode));
}

Regex из : https://stackoverflow.com/a/657670/4050261



2123
-1
задан 2 февраля 2018 в 09:02 Источник Поделиться
Комментарии
1 ответ

Ваш регекс [^a-zA-Z0-9 -_] соответствует все, что не a для z, A для Z, 0 для 9 и space для _этот последний ряд включает все символы между Гекса020 и Гекса5F (т. е. например !, ", #, $, % и многие другие), в символ класса, - должно быть, сбежал или в начале или в конце вроде:


  • [^a-zA-Z0-9 \-_]

  • [^a-zA-Z0-9 _-]

  • [^-a-zA-Z0-9 _]

Что сказал, Вы можете упростить немного:

[a-zA-Z0-9_] могут быть закодированы как \w (в зависимости от локали), так что ваше регулярное выражение будет [^\w -].

Если вы хотите быть в кодировке Unicode совместимым, используйте:

[^\pL\pN_ -] где \pL означает любую букву в любом языке и \pN для любой цифры.

1
ответ дан 2 февраля 2018 в 01:02 Источник Поделиться