Обработка строк в РНР
Одной из наиболее часто встречающихся задач в программировании является обработка символьных последовательностей. Если проще - строк. Как это делается на языке гипертекстового препроцессора РНР и есть тема этой статьи.
Откуда и как можно получить символьную последовательность? В самом простом случае - присвоить ее нужной переменной. Другие варианты - получить из формы или из файла. Если Вы присваиваете переменной нужное значение, то оно, какправило, не нуждается в обработке, так как программист делает присвоение в коде программы, и конечно, в нужном виде. Но если строка считывается из файла, или получается посредством формы, она (символьная строка) нуждается в обработке.
Самое первое, что стоит сделать, это удалить повторяющиеся пробелы. Для этого в РНР есть специальная функция: 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". Это может вызвать ошибку в определенных выражениях.
Оставить комментарий
Комментарии
$str = str_replace("red", "black", $str);
а может наоборот? красный на черный