View file library/php/php_3.txt

File size: 15.39Kb
Обработка строк
Одной из наиболее часто встречающихся задач в программировании является обработка символьных последовательностей. Если проще - строк. Как это делается на языке гипертекстового препроцессора РНР и есть тема этой статьи. 

Откуда и как можно получить символьную последовательность? В самом простом случае - присвоить ее нужной переменной. Другие варианты - получить из формы или из файла. Если Вы присваиваете переменной нужное значение, то оно, какправило, не нуждается в обработке, так как программист делает присвоение в коде программы, и конечно, в нужном виде. Но если строка считывается из файла, или получается посредством формы, она (символьная строка) нуждается в обработке. 

Самое первое, что стоит сделать, это удалить повторяющиеся пробелы. Для этого в РНР есть специальная функция: chop(str); 

Пример ее записи: 

$str = chop ($str);

В результате, обработанное значение строки $str не будет содержать повторяющихся пробелов. Если нужноу бедиться в том, что строка не содержит пробелов в начале и в конце, применяется функция trim(str); 

$str = trim ($str);

Когдат ребуется удалить пробелы только сначала строки, нужно использовать ltrim. И если уж зашла речь о начале строки, давайте убедимся, что первый символ заглавный. Что бы сделать его таковым, примените ucfirst(str); Есть и функция для перевода во всех словах в строке их первых букв в заглавные - ucwords(str);. Кроме того, очень часто бывает необходимо сравнить строку с некоторым шаблоном. 

Частный случай - поиск в строке (о нем несколько позже). Но нет никакой гарантии, что полученная строка введена пользователем или получена из файла всоответствии с правилами правописания. Другими словами - строка может содержать в середине слова или предложения чередующиеся заглавные и прописные символы. Решение данной проблемы - в применении функций strtolower(str); и strtoupper(st);. Эти функции, соответственно, переводят символьные строки в нижний и верхний регистр. Комбинирование данных возможностей языка РНР приводит к корректному построению строки независимо от того, как она была введенаили получена в начальном виде. 

Еще одна необходимая вещь при работе со строками - их обрезка. Часто она применяется при обработке форм для ввода данных. Представьте, что кто-нибудь из Ваших <доброжелателей;gt; введет в Ваш угостевую книгу текст этой статьи. Представляете, что получится? Вот дляэтого и нужно ограничить количество вводимых символов в любом поле формы. Тем более что делается это очень просто. Для начала, нужно прописать ограничениев самой форме: 

<input maxlength="100" name="form";gt;

Теперь форма с именем form ограничена вколичестве вводимых символов числом 100. Но это еще далеко не все. Дело в том, чтооб ойти такое ограничение очень просто, и нужно оно скорее для того, что бы показать посетителю предел ограничения. Дальше нужно воспользоваться функцией РНР $form=substr($form,0,99);. Этим вы просто отрезаете часть полученной строки, превышающую 100 символов (стоит цифра 99,так как счет символов начинается с нуля). Теперь все потуги Ваших знакомых завалить Вас информацией будут тщетны, так как Ваш умный скрипт не пропустит больше определенного Вами количества символов. 

Собственно говоря, у функции substr(string, start,length); совсем другое предназначение. Онавозвращает часть строки string, определяемую параметрами start (начало) и length (длина). Если параметр start положительный, то возвращаемая строка будет начинаться с start-ого символастроки string. Примеры: 

$form = substr("abcdef", 1); // вернет "bcdef"
$form = substr("abcdef", 1, 3); // вернет "bcd"

Если параметр start отрицательный, товозвращаемая строка будет начинаться start-ого символа от конца строки string. Примеры: 

$rest = substr("abcdef", -1); // вернет "f"
$rest = substr("abcdef", -2); // вернет "ef"
$rest = substr("abcdef", -3, 1); // вернет "d"

Если параметр length указан и он положительный, то возвращаемая строка закончится за length символов от начала start. Это приведет к строке с отрицательной длиной (потому что начало будет законцом строки), поэтому возвращаемаястрока удет содержать один символ отначала строки start. Если length указан и онотрицательный, то возвращаемая строка закончится за length от конца строки string. Это опять приведет к строке с отрицательной длиной, поэтому возвращаемая строка будет содержать один символ от начала строки start. Примеры: 

$rest = substr("abcdef", -1, -1); // вернет "bcde"

Вот такая полезная функция. Кроме нее,при обработке данных формы очень важноуметь вырезать из полученной строки лишние или просто недопустимые символы. Можно в этом случае применить специальную функцию, которая заменяет все вхождения строки needle в строке haystack на указанную строку str. Эта функциязаписывается так: str_replace(needle, str, haystack);. Если вам не требуются причудливые правила замены, то вам следует всегда использовать функцию вместоereg_replace(). 

Примеры: 

//вырезается символ ввода.
$str = str_replace("", "\n", $str); 
// встроке черный цвет будет заменен накрасный.
$str = str_replace("red", "black", $str); 

Следующая важная и полезная функция - нахождение длинны строки. Синтаксис strlen(string str); 

Пример: 

$a = strlen("qwerty");.

В переменной $a будет число 6, так как длинна строки - 6 символов. Еще одна интересная возможность языка РНР - перевод текста (а значит - и символьных строк) из одной кодировки в другую. Это очень полезно, если нужно согласовать кодировки, например, сайта и почтовой программы. Причем поддерживаются самые распространенные русские кодировки: stringconvert_cyr_string(str, from, to);. Аргументы from и to являются одним символом, который определяет исходную и целевую кодовую таблицу. Поддерживаемые типы: 

k - koi8-r 
w - windows-1251 
i - iso8859-5 
a - x-cp866 
d - x-cp866 
m - x-mac-cyrillic 
Htmlspecialchars - переводит специальные символы в коды HTML. htmlspecialchars(string); Определенные символы имеют особоезначение в HTML и должны быть заменены кодами HTML, если они таковые имеют. Эта функция возвращает строки с произведенными такими изменениями. Функция полезна для отчистки полученного от пользователя текста отразметки HTML (доски сообщений, гостевые книги). Осуществляются следующие замены: 

'&' (амперсанд) становится '&' 
'"' (двойные кавычки) становится '"' 
'<' (знак меньше) становится '<' 
';gt;' (знак больше) становится '>' 
Следует отметить, что эта функция незаменяет ничего, кроме указанного выше. Для полной обработки применяют функцию htmlentities(). Она переводит все возможные символы в коды HTML. Htmlentities(string); Эта функция идентична htmlspecialchars() , кроме того, что все символы, которые имеют соответствующий код HTML, заменяются на этот HTML код. В настоящее времяприменяется кодовая таблица ISO-8859-1. 

Отдельно следует рассмотреть функции поиска в строке. Strchr - Находит первоепоявление символа. strchr(haystack, needle); Эта функция является псевдонимом для функции strstr(), и полностью ей идентична. Возвращает все haystack с первого появлениястроки needle и до конца. Если параметр needle не найден, то возвращается false. Если параметр needle не является строкой, то он переводится в целое число и рассматривается как числовое значение символа. 

Strrpos - Находит позицию последнего появления символа в строке. Strrpos(haystack, needle); Возвращает номер позиции последнего появления символа needle встроке haystack. Следует отметить, что needle вэтом случае может быть толькоединственным символом. Если в качествепараметра needle указывается строка, тотолько первый символ будет использован.Если needle не найден, то возвращается false.Если параметр needle не является строкой,то он переводится в десятичное число ирассматривается как числовое значениесимвола. Strrchr -- Находит последнеепоявление символа в строке. Strrchr(haystack, needle); Эта функция возвращает позицию haystack, с которой начинается последнее появление needle и продолжаетсядо конца haystack. Возвращает false если needle не найдена. Если параметр needle содержит более чем один символ, то используется первый символ. Если параметр needle не является строкой, то он переводится в целое число и рассматривается как числовое значение символа. Пример: 

// получение всего после последней новойстроки
$text = "Line 1\nLine 2\nLine 3";
$last = substr( strrchr( $text, 10 ), 1 );

Strtok - разбивает строку. strtok( arg1, arg2); Используется для разбиения строки. Это значит, что если вы имеете строку типа "Как хорошо программировать", то выможете разбить эту строку на отдельные слова, используя пробел в качестве разделителя. 

$string = " Как хорошо программировать";
$tok = strtok($string," ");
while($tok) { echo "Word=$tok<br;gt;"; $tok = strtok(""); }

Следует отметить, что только первый вызов функции strtok использует строковый аргумент. Для каждого последующего вызова функции strtok необходим только разделитель, так как это позволяет контролировать положение в текущей строке. Для начала заново или для разбития новой строки вам необходимопросто вызвать strtok с параметром строки опять для ее инициализации. Вы можете вставлять несколько разделителей впараметр разделителя. Строка будет разделяться при обнаружении любого из указанных символов. Также будьте внимательны к разделителям равным" 0". Это может вызвать ошибку в определенных выражениях.