Основные функции 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>