Основные функции php для обработки строк
strip_tags — Эта функция возвращает строку str , из которой удалены HTML и PHP тэги. Для удаления тэгов вам ничего не надо делать, php сделает все на автомате за вас. Вот видите, уже программный код не попадет в базу, а только чистый текст. В данной функции можно сделать исключения.
Как это работает — пример использования strip_tags()
Код php
<?php $text = ' <p>Параграф.</p> <!-- Комментарий --> Здесь текст'; echo strip_tags($text); echo "\n\n-------\n"; // не удалять <p> echo strip_tags($text, '<p>'); ?>
Вот, что получилось;
Параграф. Здесь текст ------- <p>Параграф.</p> Здесь текст
Вот теперь можно наблюдать, как это сработало. В первом случае мы очистили все теги, а второй указали, какие не удалять
Trim – очистка пробелов с начала и конца строки
Эта функция возвращает строку str с удаленными из начала и конца строки пробелами. Если второй параметр не передан, trim()удаляет следующие символы:
» » (ASCII 32 (0x20)), символ пробела.
«\t» (ASCII 9 (0x09)), символ табуляции.
«\n» (ASCII 10 (0x0A)), символ перевода строки.
«\r» (ASCII 13 (0x0D)), символ возврата каретки.
«\0» (ASCII 0 (0x00)), NUL-байт.
«\x0B» (ASCII 11 (0x0B)), вертикальная табуляция.
Ну, здесь все просто, ничего сложного не вижу. Двигаемся далее
addslashes — Экранирует спецсимволы в строке (strip slashes)
Описание
string addslashes ( string $str )
Возвращает сроку str , в которой перед каждым спецсимволом добавлен обратный слэш (\), например, для последующего использования этой строки в запросе к базе данных. Экранируются одиночная кавычка (‘), двойная кавычка («), обратный слэш (\) и NUL (байт NULL).
Функция addslashes() часто применяется при записи в базу данных. Предположим, если нужно внести в базу данных имя O’reilly, то символ ‘ должен быть экранирован. В большинстве баз данных для этого используется \, строка будет выглядеть как O\’reilly. Заметьте, что сам символ \ в базу данных записан не будет. Если директива конфигурации magic_quotes_sybase имеет значениеon, то символ ‘ будет экранироваться добавлением еще одного ‘ вместо \.
Директива конфигурации magic_quotes_gpc по умолчанию имеет значение on, при этом функция addslashes() автоматически применяется ко всем данным GET, POST, и COOKIE. Не используйте addslashes() для данных, обработанных magic_quotes_gpc, чтобы избежать двойного экранирования. Для проверки состояния этой директивы используется get_magic_quotes_gpc().
Пример использования addslashes()
<?php $str = "Is your name O'reilly?"; // выводит: Is your name O\'reilly? echo addslashes($str); ?>
Если сказать просто, то функция не даст сделать SQL инъекцию в базу данных и не взломает ее.
Это что касается защиты от взлома. Ну, а теперь опишу еще одну функцию, которая запретит вводить определенное количество символов. Берем, к примеру, те же комментарии, допустим, мы не хотим комментарии более 1000 символов. Для этого есть функцияstrlen
strlen — Возвращает длину строки
Пример использования strlen
strlen($str)>1000
В результате php проверит длину строки. Вот в принципе я и описал основные функции обработки строк в php. На этом, пожалуй, завершу данный пост. Есть вопросы — задавайте в комментариях, отвечу обязательно всем. Всем удачи в программировании на php.
explode — Разбивает строку с помощью разделителя
array explode ( string $delimiter , string $string [, int $limit ] )
Возвращает массив строк, полученных разбиением строки string с использованием delimiter в качестве разделителя.
Пример
<?php /* Строка, которая не содержит разделителя, будет просто возвращать массив с одним значением оригинальной строки. */ $input1 = "hello"; $input2 = "hello,there"; var_dump( explode( ',', $input1 ) ); var_dump( explode( ',', $input2 ) ); ?>
strpos — Возвращает позицию первого вхождения подстроки
mixed strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
Ищет позицию первого вхождения подстроки needle в строку haystack.
<?php $mystring = 'abc'; $findme = 'a'; $pos = strpos($mystring, $findme); // Заметьте, что используется ===. Использование == не даст верного // результата, так как 'a' находится в нулевой позиции. if ($pos === false) { echo "Строка '$findme' не найдена в строке '$mystring'"; } else { echo "Строка '$findme' найдена в строке '$mystring'"; echo " в позиции $pos"; } ?>
filter_var — Фильтрует переменную с помощью определенного фильтра
mixed filter_var ( mixed $variable [, int $filter = FILTER_DEFAULT [, mixed $options ]] )
Список параметров
variable
Значение переменной для фильтрации.
filter
Идентификатор (ID) применяемого фильтра. На странице Types of filters приведен список доступных фильтров.
Если не указан, то используется FILTER_DEFAULT, который равнозначен FILTER_UNSAFE_RAW. Это значит, что по умолчанию не применяется никакого фильтра.
options
Ассоциативный массив параметров либо логическая дизъюнкция (операция ИЛИ) флагов. Если фильтр принимает параметры, флаги могут быть указаны в элементе массива «flags». Для фильтра «callback» должен быть указан тип callable. Фильтр «callback» должен принимать один аргумент, значение для фильтрации, и возвращать значение после фильтрации.
<?php // используйте этот формат для фильтров с дополнительными параметрами $options = array( 'options' => array( 'default' => 3, // значение, возвращаемое, если фильтрация завершилась неудачей // другие параметры 'min_range' => 0 ), 'flags' => FILTER_FLAG_ALLOW_OCTAL, ); $var = filter_var('0755', FILTER_VALIDATE_INT, $options); // для фильтра, который принимает только флаги, вы можете передать их непосредственно $var = filter_var('oops', FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE); // для фильтра, который принимает только флаги, вы так же можете передать их как массив $var = filter_var('oops', FILTER_VALIDATE_BOOLEAN, array('flags' => FILTER_NULL_ON_FAILURE)); // callback-фильтр валидации function foo($value) { // Ожидаемый формат: Фамилия, Имена if (strpos($value, ", ") === false) return false; list($surname, $givennames) = explode(", ", $value, 2); $empty = (empty($surname) || empty($givennames)); $notstrings = (!is_string($surname) || !is_string($givennames)); if ($empty || $notstrings) { return false; } else { return $value; } } $var = filter_var('Doe, Jane Sue', FILTER_CALLBACK, array('options' => 'foo')); ?>
Возвращаемые значения
Возвращает отфильтрованные данные или FALSE, если фильтрация завершилась неудачей.
Примеры
Пример #1 Пример использования filter_var()
<?php var_dump(filter_var('bob@example.com', FILTER_VALIDATE_EMAIL)); var_dump(filter_var('http://example.com', FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED)); ?>
Результат выполнения данного примера:
string(15) "bob@example.com"
bool(false)
Фильтры валидации данных
Список фильтров валидации данных
ID | Имя | Параметры | Флаги | Описание |
1 | FILTER_VALIDATE_BOOLEAN | «boolean» | default FILTER_NULL_ON_FAILURE | Возвращает TRUE для значений «1», «true», «on» и «yes». Иначе возвращает FALSE.
Если установлен флаг FILTER_NULL_ON_FAILURE, то FALSE возвращается только для значений «0», «false», «off», «no» и «», а NULL будет возвращен для всех небулевых значений.
|
2 | FILTER_VALIDATE_EMAIL | «validate_email» | default | Проверяет, что значение является корректным e-mail. |
3 | FILTER_VALIDATE_FLOAT | «float» | default, decimal FILTER_FLAG_ALLOW_THOUSAND | Проверяет, что значение является корректным числом с плавающей точкой.
|
4 | FILTER_VALIDATE_INT | «int» | default, min_range, max_range FILTER_FLAG_ALLOW_OCTAL, FILTER_FLAG_ALLOW_HEX | Проверяет, что значение является корректным целым числом, и, при необходимости, входит в определенный диапазон. |
5 | FILTER_VALIDATE_IP | «validate_ip» | default FILTER_FLAG_IPV4, FILTER_FLAG_IPV6, FILTER_FLAG_NO_PRIV_RANGE, FILTER_FLAG_NO_RES_RANGE | Проверяет, что значение является корректным IP-адресом, при необходимости только для протоколов IPv4 или IPv6, а также отсутствие вхождения в частные или зарезервированные диапазоны.
|
6 | FILTER_VALIDATE_REGEXP | «validate_regexp» | default, regexp | Проверяет значение на соответствие regexp, Perl-совместимому регулярному выражению.
|
7 | FILTER_VALIDATE_URL | «validate_url» | default FILTER_FLAG_PATH_REQUIRED, FILTER_FLAG_QUERY_REQUIRED | Проверяет значение на корректность URL (в соответствии с » http://www.faqs.org/rfcs/rfc2396), при желании можно указать обязательные компоненты. Имейте в виду, что корректная ссылка может не содержать HTTP-протокол http://, т.е. необходима еще одна проверка, определяющая наличие необходимого протокола у ссылки, например, ssh:// или mailto:. Обратите внимание, что функция работает только с ASCII-ссылками, таким образом, интернациональные доменные имена (содержащие не-ASCII символы) не пройдут проверку.
|
Замечание:
Начиная с PHP 5.4.11, числа +0 и -0 проверяются оба и как целые и как числа с плвающей точкой (используя FILTER_VALIDATE_FLOAT и FILTER_VALIDATE_INT). До версии PHP 5.4.11 они проверялись только как числа с плавающей точкой (FILTER_VALIDATE_FLOAT).
Если естановлен параметр default, то значение defaultиспользуется, если не прошла валидаци
substr — Возвращает подстроку
Описание
string substr ( string $string , int $start [, int $length ] )
Возвращает подстроку строки string, начинающейся с start символа по счету и длиной length символов.
Список параметров
string
Входная строка. Должна содержать хотя бы один символ.
start
Если start неотрицателен, возвращаемая подстрока начинается с позиции start от начала строки, считая от нуля. Например, в строке ‘abcdef’, в позиции 0 находится символ ‘a’, в позиции 2 — символ ‘c’, и т.д.
Если start отрицательный, возвращаемая подстрока начинается с позиции, отстоящей на start символов от конца строкиstring.
Если string меньше либо содержит ровно start символов, будет возвращено FALSE.
Пример #1 Использование отрицательного параметра start
<?php $rest = substr("abcdef", -1); // возвращает "f" $rest = substr("abcdef", -2); // возвращает "ef" $rest = substr("abcdef", -3, 1); // возвращает "d" ?>
length
Если length положительный, возвращаемая строка будет не длиннее length символов, начиная с параметраstart (в зависимости от длины string).
Если length отрицательный, то будет отброшено указанное этим аргументом число символов с конца строки string (после того как будет вычислена стартовая позиция, если start отрицателен). Если при этом позиция начала подстроки, определяемая аргументом start, находится в отброшенной части строки или за ней, возвращается false.
Если указан параметр length и является одним из 0, FALSE или NULL, то будет возвращена пустая строка.
Если параметр length опущен, то будет возвращена подстрока, начинающаяся с позиции, указанной параметром start и длящейся до конца строки.
Пример #2 Использование отрицательного параметра length
<?php $rest = substr("abcdef", 0, -1); // возвращает "abcde" $rest = substr("abcdef", 2, -1); // возвращает "cde" $rest = substr("abcdef", 4, -4); // возвращает false $rest = substr("abcdef", -3, -1); // возвращает "de" ?>
Возвращаемые значения
Возвращает извлеченную часть строки, или FALSE в случае возникновения ошибки или пустую строку string.
Примеры с использованием функций.
<meta charset='utf-8'> <? //--------------Валидация данных----------------------------- if(isset($_GET['email'])) { $pos=mb_strpos($_GET['email'],"@"); echo $login=substr($_GET['email'],0,$pos); echo "<hr>"; echo $_GET['email']; if(filter_var($_GET['email'], FILTER_VALIDATE_EMAIL) !== false) { echo "Валидация емайла прошла успешно"; } else { echo "Валидация емайла не пройдена"; } } //----------------защита sql запросов; SQL инъекции--------- /*$data="'данные'"; $data=addslashes($data); echo "{$data}"; echo "<br>"; echo$data=stripslashes($data); echo "<br>"; $p="');delete from users;"; mysql_query("insert into user (`user`,`password`) values ('{$u}','{$p}')"); "insert into user (`user`,`password`) values ('fff','');delete from users;')"*/ //===========удаляем теги используя strip_tags=============== $_GET['otziv']=strip_tags($_GET['otziv'],"<h1><p>"); //задаем кодировку mb_internal_encoding //==============Блокируем стоп слова============================ mb_internal_encoding("utf-8"); //задаем преобразуем в нижний регистр mb_strtolower $lower=mb_strtolower($_GET['otziv']); $stop=array("дурак","спам","идиот"); foreach($stop as $word)//для каждого элемента массива $stop как $word { if(mb_strpos($lower,$word)!==false) //проверяем есть ли стоп слово { echo "Обнаружено запрещенное слово."; $_GET['otziv']="Удалено за нарушение правил сайта. "; break; } } echo $_GET['otziv']; //======================Форма с перечислением=============== echo $_GET['tel']; echo "<hr>"; $tel_array=explode(",",$_GET['tel']);//преобзаовать строку в массив $cnt=1; foreach($tel_array as $tel) { $tel=trim($tel);// удаляем пробелы в начале и в конце строки if(strlen($tel)<1)//защита от пустых данных continue; echo "телефон ".$cnt.": ".$tel; echo "<br>"; $cnt++; } ?> <head> <style> input{width:100%;} textarea{width:100%;height:300px;} </style> </head> <h1>Валидация данных.</h1> <hr> <form> Ваш емайл<br> <input name='email' type='email' required ><br><br> <input type='submit'> </form> <h1>Введите телефоны через запятую.</h1> <hr> <form> Контактные телефоны<br> <input name='tel' ><br><br> <input type='submit'> </form> <h1>Форма оставить комментарий.Защита данных.</h1> <hr> <form> Ваше имя<br> <input name='user' ><br><br> Ваш отзыв<br> <textarea name='otziv'></textarea><br><br> <input type='submit'> </form>