Php урок 8. Основные функции PHP

Автор: | 11.09.2015

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