PHP: Чистка переменной
Чтобы очистить переменную в PHP, можно использовать функцию htmlspecialchars для преобразования специальных символов в их HTML-сущности. Это предотвратит вставку вредоносного кода в веб-страницы. Также можно использовать функцию strip_tags для удаления всех HTML и PHP тегов из строки, чтобы избежать XSS-атак. Кроме того, можно использовать функцию trim для удаления пробельных символов с начала и конца строки, а функцию filter_var для проверки переменной на соответствие определенному формату, например, email адресу или URL
Например, если у вас есть переменная $input, которая содержит пользовательский ввод, вы можете очистить ее с помощью функции htmlspecialchars и trim следующим образом:
# Это удалит пробельные символы с начала и конца строки, # заменит специальные символы на HTML-сущности # и вернет безопасную для использования переменную $input htmlspecialchars( trim( $_POST['input'] ) ); # Обратная функцция htmlspecialchars_decode() # Если нужно преобразовать все возможные символы в соответствующие HTML-сущности, используйте htmlentities htmlentities( trim( $_POST['input'] ) ); # Обратная функцция html_entity_decode() # Вторым параметром можно указать флаги для определния правил преобразования htmlentities( $str, ENT_QUOTES | ENT_IGNORE ); htmlspecialchars( $str, ENT_COMPAT | ENT_SUBSTITUTE | ENT_HTML401 ); # Флаги: # ENT_COMPAT - преобразует двойные кавычки, одинарные кавычки не изменяются # ENT_QUOTES - преобразует как двойные, так и одинарные кавычки # ENT_NOQUOTES - не преобразует кавычки # ENT_IGNORE - отбрасывает некорректные кодовые последовательности # ENT_SUBSTITUTE - заменяет некорректные кодовые последовательности символом замены Юникода U+FFFD в случае использования UTF-8 или � при использовании другой кодировки, вместо возврата пустой строки # ENT_HTML401 - обработка кода в соответствии с HTML 4.01 # ENT_XML1 - обработка кода в соответствии с XML 1 # ENT_XHTML - обработка кода в соответствии с XHTML # ENT_HTML5 - обработка кода в соответствии с HTML 5 # Третьим параметром можно указать кодировку, используемую при конвертации символов htmlspecialchars( $_POST['input'], ENT_HTML5, 'UTF-8' ); # Четвёртый параметр разрешает или запрещает преобразование существующих html-сущности # Другими словами, можно запретить двойное преобразование, указав значение false htmlspecialchars( $_POST['input'], ENT_HTML5, 'UTF-8', false );
Если вам нужно удалить все HTML и PHP теги из строки, вы можете использовать функцию strip_tags:
# Это удалит все теги из строки, оставив только текст strip_tags( $_POST['input'] ); # Разрешаем <br>, <p> и <a> strip_tags( $_POST['input'], '<br><p><a>' );
Если вы хотите проверить переменную на соответствие определенному формату, вы можете использовать функцию filter_var:
# Проверка email адреса на валидность: $email = 'example.com'; if( !filter_var( $email, FILTER_VALIDATE_EMAIL ) ) { echo "Email адрес $email неверный"; } # Удаление всех тегов HTML из строки: $html = '<p>Это текст <b>с HTML тегами</b></p>'; $clean_html = filter_var( $html, FILTER_SANITIZE_STRING ); echo $clean_html; // > "Это текст с HTML тегами" # Проверка переменной на соответствие URL-адресу: $url = 'example.com'; if( !filter_var( $url, FILTER_VALIDATE_URL ) ) { echo "URL $url неверный"; } # Удаление всех небезопасных символов из переменной: $unsafe = '<script>alert("опасность!");</script>'; $safe = filter_var( $unsafe, FILTER_SANITIZE_STRING ); echo $safe; // > "alert(опасность!);" # Проверка переменной на соответствие целому числу: $number = '123abc'; if( !filter_var( $number, FILTER_VALIDATE_INT ) ) { echo "Переменная $number не является целым числом"; } # Проверка переменной на соответствие диапазону значений: $age = 15; $options = array( 'options' => array( 'min_range' => 18, 'max_range' => 65 ) ); if( !filter_var( $age, FILTER_VALIDATE_INT, $options ) ) { echo "Возраст $age не подходит"; }
Для очистки переменной с использованием регулярных выражений в PHP можно использовать функцию preg_replace, которая позволяет заменить совпадения с заданным шаблоном регулярного выражения на указанную строку.
Например, чтобы очистить переменную $input от всех символов, кроме букв, цифр и пробелов, можно использовать следующий код:
# В этом примере регулярное выражение /[^a-zA-Z0-9\s]/ находит все символы, кроме букв, цифр и пробелов, # а функция preg_replace заменяет их на пустую строку. # Таким образом, если переменная $input содержит строку "Hello, 123!@#", # после применения этого кода, она будет содержать только "Hello 123". $input = preg_replace('/[^a-zA-Z0-9\s]/', '', $input);
Комментарии