Автор статьи:
Обработка строк в РНРОдной из наиболее часто встречающихся задач в программировании является обработка символьных последовательностей. Если проще — строк. Как это делается на языке гипертекстового препроцессора РНР и есть тема этой статьи.
Откуда и как можно получить символьнуюпоследовательность? В самом простомслучае — присвоить ее нужной переменной.Другие варианты — получить из формы илииз файла. Если Вы присваиваетепеременной нужное значение, то оно, какправило, не нуждается в обработке, таккак программист делает присвоение вкоде программы, и конечно, в нужном виде.Но если строка считывается из файла, илиполучается посредством формы, она (символьнаястрока) нуждается в обработке.
Самое первое, что стоит сделать, этоудалить повторяющиеся пробелы. Дляэтого в РНР есть специальная функция: chop(str);Пример ее записи:
$str = chop ($str);
В результате, обработанное значениестроки $str не будет содержатьповторяющихся пробелов. Если нужноубедиться в том, что строка не содержитпробелов в начале и в конце, применяетсяфункция trim(str); ( $str = trim ($str); ). Когдатребуется удалить пробелы только сначала строки, нужно использовать ltrim. шесли уж зашла речь о начале строки,давайте убедимся, что первый символ заглавный. Что бы сделать его таковым,примените ucfirst(str); Есть и функция дляперевода во всех словах в строке ихпервых букв в заглавные — ucwords(str);. Крометого, очень часто бывает необходимосравнить строку с некоторым шаблоном.Частный случай — поиск в строке (о немнесколько позже). Но нет никакойгарантии, что полученная строка введенапользователем или получена из файла всоответствии с правилами правописания.Другими словами — строка можетсодержать в середине слова илипредложения чередующиеся заглавные ипрописные символы. решение даннойпроблемы — в применении функций strtolower(str);и strtoupper(st);. Эти функции, соответственно,переводят символьные строки в нижний иверхний регистр. Комбинирование данныхвозможностей языка РНР приводит ккорректному построению строки независимо от того, как она была введенаили получена в начальном виде.
Еще одна необходимая вещь при работе состроками — их обрезка. Часто онаприменяется при обработке форм дляввода данных. Представьте, что кто-нибудьиз ваших ><доброжелателей> введет в вашугостевую книгу текст этой статьи.Представляете, что получится? Вот дляэтого и нужно ограничить количествовводимых символов в любом поле формы.Тем более что делается это очень просто.Для начала, нужно прописать ограничениев самой форме:
Теперь форма с именем 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 (доски сообщений, гостевыекниги). Осуществляются следующие замены:
‘&’ (амперсанд) становится ‘&’
‘»‘ (двойные кавычки) становится ‘"’
‘<' (знак меньше) становится '<'
'>‘ (знак больше) становится ‘>’
Следует отметить, что эта функция незаменяет ничего, кроме указанного выше.Для полной обработки применяют функцию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
«; $tok = strtok(«»); }
Следует отметить, что только первыйвызов функции strtok использует строковыйаргумент. Для каждого последующеговызова функции strtok необходим толькоразделитель, так как это позволяетконтролировать положение в текущейстроке. Для начала заново или дляразбития новой строки вам необходимопросто вызвать strtok с параметром строкиопять для ее инициализации. Вы можетевставлять несколько разделителей впараметр разделителя. Строка будетразделяться при обнаружении любого изуказанных символов. Также будьтевнимательны к разделителям равным»0″. Это может вызвать ошибку вопределенных выражениях.
Вот то, что понадобится Вам для работы состроками в первую очередь. Тут приведендалеко не полный перечень всехстроковых функций. Рассмотрены толькосамые основные. За подробнойинформацией я отсылаю Вас к переводуруководства по РНР всероссийского клубаWeb-мастеров, на основе данных которого инаписана эта статья. Адрес в интернете -http://www.webclub.ru/.