Добро пожаловать!
Здесь вы можете найти ответ на интересующий вас вопрос в отрасли сайтостроения, познакомится ближе с web технологиями и web стандартами.

PHP и MySQL

Глава 3. Строковые функции PHP.

§ 3.1. Функция htmlspecialchars.

Вообще говоря, эта функция относится к функциям преобразования символов, о которых пойдет разговор в этой главе. Эта функция вынесена в самое начало из-за того, что она делает одну очень важную вещь — производит преобразование спецсимволов в их HTML эквиваленты. Попросту говоря, эта функция гарантирует, что если вы вдруг вздумаете написать в гостевой книге или на форуме какой-то код (php, javascript и т.д.) он отобразиться совершенно нормально, но выполняться не будет! Т.е. функцию надо применять, если нужно вывести в браузере какой-то код.

Синтаксис:
string htmlspecialchars(string str [, int quote_style [, string charset]]);

Первый аргумент — строка, в которой надо выполнить преобразование. В качестве второго необязательного аргумента принимается одна из двух констант: ENT_QUOTES или ENT_QUOTES. Первая константа передается если надо транслировать кавычки, а вторая, если этого делать не надо. Третий необязательный аргумент принимает строку, представляющую набор символов, используемых в преобразовании (по умолчанию ISO-8859-1).

К примеру, если вы обрабатываете какое-то сообщение $msg формы, то обработка его функцией htmlspecialchars() возможна следующим образом:

$msg = htmlspecialchars($msg);

Давайте напишем простой php-скрипт, который будет отображать данные, вводимые в форме.

<?
$action = $_POST["action"];
if ( empty($action) )
{
?>
   <html>
   <head>
   <title>
   Применение функции htmlspecialchars()
   </title>
   </head>
   <BODY>
   <div align="center">
   <form action=test1.php method=post>
   <input type=hidden name=action value=post>
   Сообщение<br>
   <textarea cols="50" rows="8" name="msg">
   <? echo $msg; ?>
   </textarea>
   <br>
   <input type=submit value='Добавить'>
   </form>
   <div align="center">
   </body>
   </html>
<?
}
?>

Выводится и обрабатывается введенное сообщение файлом, указанным в атрибуте action формы (test.php):

<?
   $msg = substr($_POST["msg"],0,1024);
   $msg = htmlspecialchars($msg);
   print "<p>".$msg."</p>\n";
?>

Здесь все просто. Выделяем из переменной $_POST["msg"] сообщение (о функции substr() смотрите чуть ниже), обрабатываем это сообщение функцией htmlspecialchars() и выводим.

А теперь давайте введем в форму для ввода сообщения вместо безобидного текста вот такой javascript-код:

<script language="JavaScript">
   alert("Приветик!"); // функция вывода в JavaScript
</script>

Т.е. наша форма примет следующий вид:

В случае, если при обработке сообщения мы использовали эту чудо-функцию, ничего страшного не произойдет и мы просто увидим текст, который набрали:

<script language="JavaScript">alert("Приветик!");</script>

А вот если бы мы не обработали сообщение функцией htmlspecialchars() (закомментарьте строку $msg=htmlspecialchars($msg); в test.php), то мы увидим уже не текст скрипта, а результат его выполнения:

Как понимаете, "Приветик" может быть совсем не таким безобидным.

§ 3.2. Функции поиска в тексте.

3.2.1. substr()

Синтаксис:
string substr(string string, int start[, int length])

Возвращает подстроку строки string длиной length, начинающегося с start символа по счету.

Если start неотрицателен, возвращаемая подстрока начинается в позиции start от начала строки, считая от нуля. Например, в строке "abcdef", в позиции 0 находится символ 'a', в позиции 2 — символ 'c', и т.д.

Если третий аргумент не указан, то возвращается вся оставшаяся часть строки.

Пример:
<?
   $string = substr("Hello, world!", 7, 2);
   echo ();
?>

Результат выполнения — подстрока "wo". Если же третий параметр не указывать, т.е. написать

$string = substr("Hello, world!", 6);
то возвратиться подстрока "world!".

3.2.2. strpos()

Синтаксис:
string strpos(string haystack, string needle[, int offset])

Эта функция обеспечивает действие, обратное функции substr. Т.е. возвращает позицию первого вхождения needle в строку haystack. В PHP 4 используется только первый символ строки needle.

Если подстрока needle не найдена, возвращает false.

Если needle не является строкой, он приводится к целому и трактуется как код символа.

Замечание:
Эта функция может возвращать как логическое значение false, так и не относящееся к логическому типу значение, которое приводится к false, например, 0 или "". Используйте оператор === для проверки значения, возвращаемого этой функцией.

Замечание:
Начиная с PHP 5.0.0, необязательный аргумент offset позволяет указать, с какого по счету символа строки haystack начинать поиск.

Замечание:
Начиная с PHP 5.0.0 needle используется полностью (а не только первый символ).

<?
   $string = strpos("Hello, world!", "world");
   // выводит число 7
   echo($string);
?>

Необязательный параметр offset позволяет указать в строке позицию, с которой надо начинать поиск.

3.2.3. strrpos()

Синтаксис:
string strrpos(string haystack, string needle)

Эта функция ищет в строке haystack последнюю позицию, где встречается символ needle.

3.2.4. strstr()

Синтаксис:
string strstr(string haystack, string needle)

Функция strstr() возвращает участок строки, заданной в параметре haystack, начиная с первого фрагмента, указанного в параметре needle и до конца строки. В случае неудачи функция возвращает false.

Пример:
<?
  $url = "http://www.somehost.ru";
  $www = strstr($url,"w");
  echo ($www);
?>

Результат: www.somehost.ru

Эта функция чувствительна к регистру. Заметим также, что в случае, если needle не является строкой, то значение преобразуется в целое и используется как код искомого символа.

3.2.5. strchr()

Синтаксис:
string strchr(string haystack, string needle)

Данная функция работает абсолютно идентично функции strstr():

<?
   $url = "http://www.somehost.ru";
   $www = strstr($url,"w");
   echo ($www);
?>

Результат: www.somehost.ru

3.2.6. stristr()

Синтаксис:
string stristr(string haystack, string needle)

Эта функция работает абсолютно аналогично функции strstr(), только является нечувствительной к регистру.

3.2.7. strrchr()

Синтаксис:
string strrchr(string haystack, string needle)

Возвращает подстроку строки haystack начиная с последнего вхождения needle до конца строки.

Если подстрока needle не найдена, возвращает false.

В отличие от strchr(), если needle состоит более чем из одного символа, используется только первый символ.

Если needle не является строкой, он приводится к целому и трактуется как код символа.

<?
  // получить имя файла
  $file_path = "http://www.host.ru/catalog/index.php";
  $file_name = substr( strrchr($file_path, "/"), 1 );
?>

3.2.8. substr_count()

Синтаксис:
int substr_count(string haystack, string needle)

Функция substr_count() находит количество вхождений фрагмента в строку. Она возвращает число фрагментов needle, присутствующих в строке haystack.

<?
   $str = "http://www.host.ru/catalog/index.php";
   $count1 = substr_count($str,"/");
   // выводит число 4
   echo $count1;
   $count2 = substr_count($str,"//");
   // выводит число 1
   echo $count2;
?>

3.2.9. strspn()

Синтаксис:
int strspn(string str1, string str2)

Возвращает длину участка в начале строки str1, любой символ которого входит в строку str2.

<?
  $var = strspn("42 is the answer, what is the question ...", "1234567890");
?>

Переменной $var будет присвоено значение 2, так как "42" — это самый длинный участок строки, состоящий только из символов "1234567890".

3.2.10. strcspn()

Синтаксис:
int strcspn(string str1, string str2)

Обратная функции strspn() функция strcspn() определяет отсутствие начальных символов в строке.

Возвращает длину участка в начале строки str1, который не содержит ни одного символа из строки str2.