Функции работы со строками в PHP


Содержание

Работа со строками в PHP

Создание строки

В PHP, как и в других языках программирования, строки пишутся в кавычках. При этом PHP делает серьёзные различия между одинарными и двойными кавычками. Эти различия мы будем рассматривать при изучении данной темы.

Сложение строк

Для сложения строк не работает оператор «+». Вместо этого используется точка. Пример:

Переменную можно вставить в строку. Но для этого строка должна быть именно в двойных кавычках. Если она будет в одинарных, то в строку будет добавлено не значение а имя переменной, то есть знак $ и название. А если строка в двойных кавычках, то будет вставлено значение переменной.

Я не рекомендую часто пользоваться этой возможностью, потому что такая программа работает несколько медленнее. Лучше использовать сложение строк.

Строковые функции

В PHP есть достаточно много функций для работы со строкими. Однако, в их использовании есть одна сложность: они расчитаны на строки в однобайтных кодировках. В таких кодировках каждый символ занимает один байт. Но современные кодировки, в том числе, UTF-8, многобайтные. Поэтому некоторые функции работают неправильно со строками, содержащими русские буквы. В частности, неправильно определяются позиции символов в строке и длина строки. Одно из решений — использовать функции предназначенные для работы с многобайтными кодировками. Названия таких функций начинаются со слова mb. Перед их использованием необходимо указать внутреннюю кодировку скрипта. Для этого используестся функция mb_internal_encoding() . Она пишется один раз скрипте до использования строковых функций.

Функция mb_substr() возвращает подстроку, начиная с указанного символа:

mb_substr (строка, начальный символ, длина)

строка — строка из которой получается подстрока.

начальный символ — номер символа, с которого начинается подстрока

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

В PHP, как и в большинстве языков программирования, отсчёт символов в строке начинается с нуля.

Для примера выведем подстроку из переменной $str , начиная с 0 символа, длиной 6 символов:

Начальный символ может иметь отрицательное значение. В этом случае отсчёт производится не с начала, а с конца строки.

Длину тоже можно указать отрицательным числом. Тогда этот параметр меняет свой смысл. Это не длина подстроки, а номер символа с конца строки, до которого доходит подстрока. Выведем подстроку начиная с 7 символа с конца строки, длиной 5 символов:

Функция mb_strpos() возвращает позицию первого вхождения подстроки в строке.

mb_strpos (строка, подстрока, начальный символ)

строка — строка в которой производится поиск

подстрока — подстрока, которую нужно найти

начальный символ — номер символа, с которого начинается поиск. Необязательный параметр. Позволяет осуществлять поиск не с начала строки, а с указанного символа.

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

Для примера найдём позицию, с которой начинается слово «на» в переменной $newstr :

Функция mb_strrpos() находит позицию не первого, а последнего вхождения подстроки в строке. Параметры у неё такие же.

Кроме того, существуют функции mb_stripos() и mb_strripos() , которые также находят позицию первого и последнего вхождения подстроки, но они не учитывают регистр символов.

Функция str_replace() находит все вхождения подстроки и заменяет их на другую подстроку. Она не выводит позицию символов, поэтому её можно использовать с русскими символами.

str_replace (искомая подстрока, новая подстрока, строка, количество замен)

искомая подстрока — подстрока, которая будет заменена

новая подстрока — подстрока, на которую происходит замена

строка — строка, в которой производится замена

количество замен — количество замен, которое будет произведено. Необязательный параметр. Позволяет заменить не все вхождения, а только часть, например, только первое вхождение.

Для примера заменим в переменной $newstr слово «экран» на слово «страницу»:

Учитывайте, что эта функция не меняет значение переменной, она только возвращает новое значение, а сама переменная остаётся неизменной.

Вместо строки, в которой производится замена, может быть массив. Тогда замена будет сделана для всех элеменах массива и функция str_replace() также вернёт массив.

Вместо иcкомой подстроки и новой подстроки также могут быть массивы. Можно использовать одну подстроку для замены массива. Тогда все элементы массива будут заменены на новую подстроку.

Коприрование материалов сайта возможно только с согласия администрации

Строковые функции PHP

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

Вот список основных, и самых используемых строковых функций в php:

  1. srelen («текст») — считает количество символов в строке. Вот небольшой пример:
  2. str_replace(«что заменять», «на что заменять», «текст»); – функция нужна для замены подстроки в строке. Например, нам нужно заменить слово студия на «ля-ля-ля», в предложении: «Дизайн студия OX2 на рынке 20 лет» На экране увидим: «Дизайн ля-ля-ля OX2 на рынке 20 лет »
  3. trim («текст», «символы») — удаляет символы по краям. Например, нам нужно удалить по-краям пробелы и запятые в строке — « , , , Дизайн студия ox2.ru , , «, «, ». Для этого напишем код: Первый параметр строка, второй — символы, которые нужно удалить по краям (если не указывать второй параметр, то обрезаться будут только пробелы).
    На экране увидим «Дизайн студия ox2.ru», без пробелов и запятых. Есть аналогичные функции ltrim — удаляет символы слева, и rtrim — справа.
    Функция очень часто используется при создании интернет-магазинов, например при авторизации, чтобы пользователь при копировании пароля из блокнота случайно не вставил лишние пробелы или другие знаки.
  4. substr(«Строка», «Начальная позиция», «Конечная позиция»); — возвращает часть строки. Например, нам нужно в строке «Дизайн студия ox2.ru занимается созданием сайтов и интернет-магазинов» обрезать все лишнее, и оставить только «ox2.ru занимается созданием сайтов», для этого напишем код: Вырезаем подстроку, начинаю с 14-ого символа, и заканчивая 34. На экране увидим «ox2.ru занимается созданием сайтов». Если последний параметр (34) не указывать, то текст будет вырезан с 14-ой позиции до конца строки.
  5. strpos(«Строка», «подстрока», позиция начального символа); — возвращает позицию найденной подстроки в строке. Например, нам нужно узнать позицию слова «ox2» в строке «Компания ox2.ru умеет создавать интернет магазины. В дизайн студии ox2.ru вы можете заказать сайт», пишем код: На экране увидим 9, т.к. с 9-ого символа начинается первое вхождение слова ox2. Если указать 3-ий параметр то поиск вхождения будет с этой позиции.
    Так же есть функция strrpos, она ищет справа налево. Если в этом примере указать вместо strpos – strrpos, то на экране увидим 67, т.к. справа первое вхождение начинается с 67-ого символа.

Теперь напишем пример, для закрепления материала. В нашем скрипте будем обрабатывать данные из текстового поля «Адрес сайта:». Адрес сайта можно ввести так: «http://ox2.ru/», можно так «www.ox2.ru», можно так: «ox2.ru/», и т.д. Вариантом достаточно много. А для нашего интернет-магазина обязательное условие, это хранение всех данных о пользователе в едином формате («ox2.ru», без http, www, пробелов и слэшей по краям!).

Конечно это не самый удачный вариант, использовать такое количество строковых функций для обрезания лишнего, можно воспользоваться той же функцией str_replace:

Но цель урока показать использование этих функций в связке.

Работать со строковыми функциями приходиться не только если цены на создание сайтов высокие, в эконом сайтах они тоже почти всегда используются.

Обрезание строк с помощью функций PHP

В этой статье мы рассмотрим несколько различных способов в PHP обрезать строку на определенное количество слов и символов. Большая часть функций, описанных в этой статье, используется, чтобы продемонстрировать возможности PHP для работы со строками.

Во всех наших примерах мы будем использовать следующую строку, и будем исходить из того, что нам нужно уменьшить количество символов в строке со 187 до 120 символов ( для Twitter) .

В нашем примере мы также используем вторую строку из 55 символов, чтобы вы могли проверить возвращаемый результат на более короткой строке.

mb_strimwidth()

mb_strimwidth() возвращает в PHP обрезанную строку по длине и добавляет конечные символы, указанные в функции. Так как это одна из основных функций PHP , ее мы рассмотрим в первую очередь. Применяется она очень просто:

Функция рассматривает свободное пространство как символ. Но это значит, что между последним усеченным символом и конечным символом многоточием будет размещаться пробел. Вы можете обрезать строку без конечного символа, а затем добавить его отдельно. Посмотрите на следующий пример:

Приведенный выше код добавляет многоточие не зависимо от того, была ли PHP обрезана строка до символа или нет. Чтобы исправить это, мы будем рассчитывать длину строки, и только после этого добавлять многоточие, если исходная строка действительно должна обрезаться. Например:

При отправке сообщений в Twitter и на другие ресурсы, где символы чувствительны к регистру, каждый символ имеет значение… и эта функция в ряде случаев сэкономит вам один пробел!

mb_substr()

Функция PHP mb_substr() « получает часть строки «. Она возвращает подстроку на основе количества символов. Позиция обрезки отсчитывается от начала строки. Позиция первого символа равна 0 . Позиция второго символа равна 1 . И так далее.

Чтобы добавить многоточие ( или любой другой конечный символ ), мы можем изменить первую функцию, которую рассматривали. Мы обрезаем строку перед добавлением $trimmarker , чтобы гарантировать, что у нас не будет добавляться в PHP обрезанной строке с конца лишний пробел.

mb_substr(), substr() и mb_strcut()

mb_substr() , substr() и mb_strcut() — еще несколько функций, похожих на те, которые я описал выше. Они отличаются только тем, как обрабатываются многобайтовые наборы символов ( китайский язык и т.д. ).

Если вы выводите PHP обрезанную часть строки до ближайшего слова на основе количества символов ( но без конечного многоточия ), используйте следующий код:

preg_match()

Вы редко найдете тех, кто предпочитает использовать регулярные выражения, когда есть так много отличных функций PHP . Тем не менее, вот функция, которая обрезает строку до определенного символа в PHP , исходя из заданного количества знаков от начала. В отличие от других функций, описанных выше, эта функция обрезает строку до целого слова.

Описание функции

Функция принимает три параметра: $string , $length и $trimmarker ( многоточие или другие символы, которые добавляются в конце строки ).

Строка 7

Первое, что мы делаем, это проверяем длину PHP обрезанной строки после символа. Если строка короче, чем $length , то мы возвращаем эту строку.

Строка 9

Функция mb_substr() прерывает строку в $length , если это количество символов не содержит окончания слова ( пробела ). Если мы передали строку длиною 500 символов и эта строка не содержит пробелов, то будет возвращена вся строка ( так как функция preg_match не нашла окончания слова ). На данный момент мы обрезаем строку таким образом, и возвращаем ее полностью.

Строки 10, 11, и 12

Если длина нашей строки превышает максимальную длину, определенную в качестве параметра функции, мы выполняем регулярное выражение функции preg_match() , чтобы вернуть часть строки до символа с номером $length , который определяется как конец слова ( ‘/^.<1,$length>b/s’ ). Знак периода означает любой символ, кроме символа новой строки ( n ). Фигурная скобка определяет диапазон, который задает, сколько символов должен PHP обрезать в строке. Таким образом <1,$length>означает от 1 до символа $length . Наконец, b означает, что шаблон будет соответствовать окончанию слова. Мы можем производить поиск только слов целиком по шаблону, который мы предоставили. И в конце s задает поиск всех пробелов.

Так как мы не хотим, чтобы возвращаемая строка превышала длину $length , максимальное количество символов в функции preg_match должно быть равно максимальной длине минус длина $trimmarke.r . Мы должны учитывать это.

Затем мы возвращаем либо усеченную строку, либо исходную строку, если она меньше заданной длины усечения.

strrpos()

Функция strrpos() находит позицию последнего вхождения подстроки в строке. Она возвращает позицию, на которой располагается искомая подстрока относительно начала строки. Отметим также, что первая позиция в строке имеет номер 0 — а не 1 , поэтому мы учитываем это в функции, добавляя 1 к длине строки при применении функции strrpos() .

wordwrap()

Использование wordwrap() — это еще один способ, с помощью которого можно в PHP обрезать строку до пробела, хотя он не очень эффективен и не является лучшим выбором (если только обстоятельства не требуют этого). Wordwrap оборачивает строку в заданное число символов с использованием символа разрыва строки. Применив функцию PHP explode() , мы можем построить массив из каждой строки текста. Мы определяем, нужен ли $trimmarker ( конечное многоточие ), запросив, пусто ли второе значение массива. Если пусто, то строка не оборачивается.

Определение для параметра cut значения true означает, что строка всегда оборачивается до или на указанном символе.

str-split()

Функция str-split() может быть использована в приведенной выше функции для преобразования строки в массив. str-split () не разбивает строку до целого слова. С ее помощью PHP обрезает последний символ в строке ровно до 120 знаков.

Усечение по заданному количеству слов

Ниже приведен пример PHP обрезки строки по количеству символов, пробелов или слов. Это не слишком отличается от того, что мы уже делали. Затем мы сводим скорректированный массив в строку символов, максимальное количество которых задается $limit . Мы добавляем $trimmarker (…) , если наш $limit меньше, чем количество слов в массиве.

strtok()

Совместно применив strtok() и wordwrap() мы можем создать короткую, но эффективную функцию, которая будет в PHP обрезать строку до нужной длины. Как показано ниже, она не будет учитывать при усечении $length +$trimmarker . Но это удобно, если вы не слишком заботитесь о длине возвращаемой строки.

Обрезка слов в WordPress

Для возврата обрезанного слова в WordPress используется wp_trim_words . Данная функция часто применяется в сочетании с wp_strip_all_tags для очистки текста до его обработки. Конечно, есть и другие функции, которые служат для той же цели.

Заключение

Мы могли бы написать еще сотни примеров PHP обрезки строк, но когда-то нужно остановиться. Функции, приведенные в этой статье, являются частью ядра PHP , и вы можете использовать их для усечения строк. Хотя чаще всего программисты стараются избегать регулярных выражений, если другого выхода нет, вы можете прибегнуть и к их помощи.

В ряде примеров мы вернули $trimmarker, представляющий собой многоточие. При необходимости вы можете вернуть HTML-объект Ellipsis , для этого используется код …. Но лично я предпочитаю многоточие.

Скачать примеры

Скачать примеры из этой статьи вы можете здесь .

Данная публикация представляет собой перевод статьи « Truncate (Shorten) Strings to the Nearest Whole Word or Character Count with Trailing Dots using PHP Functions » , подготовленной дружной командой проекта Интернет-технологии.ру

ГЛАВА 8 Строки и регулярные выражения в PHP

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

Поиск по шаблону позволяет не только находить определенные фрагменты текста, но и заменять их другими фрагментами. Одним из стандартных примеров поиска по шаблону являются команды поиска/замены в текстовых редакторах — например, в MS Word, Emacs и в моем любимом редакторе vi. Всем пользователям UNIX хорошо известны такие программы, как sed, awk и grep; богатство возможностей этих программ в значительной степени обусловлено средствами поиска по шаблону. Механизмы поиска по шаблону решают четыре основные задачи:


  • поиск строк, в точности совпадающих с заданным шаблоном;
  • поиск фрагментов строк, совпадающих с заданным шаблоном;
  • замену строк и подстрок по шаблону;
  • поиск строк, с которыми заданный шаблон не совпадает.

Появление Web породило необходимость в более быстрых и эффективных средствах поиска данных, которые бы позволяли пользователям со всего мира находить нужную информацию среди миллиардов web-страниц. Поисковые системы, онлайновые финансовые службы и сайты электронной коммерции — все это стало бы абсолютно бесполезным без средств анализа гигантских объемов данных в этих секторах. Действительно, средства обработки строковой информации являются жизненно важной составляющей практически любого сектора, так или иначе связанного с современными информационными технологиями. В этой главе основное внимание посвящено средствам обработки строк в PHP. Мы рассмотрим некоторые стандартные строковые функции (в языке их больше 60!), а из приведенных определений и примеров вы получите сведения, необходимые для создания web-приложений. Но прежде чем переходить к специфике PHP, я хочу познакомить вас с базовым механизмом, благодаря которому становится возможным поиск по шаблону. Речь идет о регулярных выражениях.

Регулярные выражения

Регулярные выражения лежат в основе всех современных технологий поиска по шаблону. Регулярное выражение представляет собой последовательность простых и служебных символов, описывающих искомый текст. Иногда регулярные выражения бывают простыми и понятными (например, слово dog), но часто в них присутствуют служебные символы, обладающие особым смыслом в синтаксисе регулярных выражений, — например, .* .

В PHP существуют два семейства функций, каждое из которых относится к определенному типу регулярных выражений: в стиле POSIX или в стиле Perl. Каждый тип регулярных выражений обладает собственным синтаксисом и рассматривается в соответствующей части главы. На эту тему были написаны многочисленные учебники, которые можно найти как в Web, так и в книжных магазинах. Поэтому я приведу лишь основные сведения о каждом типе, а дальнейшую информацию при желании вы сможете найти самостоятельно. Если вы еще не знакомы с принципами работы регулярных выражений, обязательно прочитайте краткий вводный курс, занимающий всю оставшуюся часть этого раздела. А если вы хорошо разбираетесь в этой области, смело переходите к следующему разделу.

Синтаксис регулярных выражений (POSIX)

Структура регулярных выражений POSIX чем-то напоминает структуру типичных математических выражений — различные элементы (операторы) объединяются друг с другом и образуют более сложные выражения. Однако именно смысл объединения элементов делает регулярные выражения таким мощным и выразительным средством. Возможности не ограничиваются поиском литерального текста (например, конкретного слова или числа); вы можете провести поиск строк с разной семантикой, но похожим синтаксисом — например, всех тегов HTML в файле.

Простейшее регулярное выражение совпадает с одним литеральным символом — например, выражение g совпадает в таких строках, как g , haggle и bag. Выражение, полученное при объединении нескольких литеральных символов, совпадает по тем же правилам — например, последовательность gan совпадает в любой строке, содержащей эти символы (например, gang, organize или Reagan).

Оператор | (вертикальная черта) проверяет совпадение одной из нескольких альтернатив. Например, регулярное выражение php | zend проверяет строку на наличие php или zend.

Квадратные скобки ([ ]) имеют особый смысл в контексте регулярных выражений — они означают «любой символ из перечисленных в скобках». В отличие от регулярного выражения php, которое совпадает во всех строках, содержащих литеральный текст php, выражение [php] совпадает в любой строке, содержащей символы р или h. Квадратные скобки играют важную роль при работе с регулярными выражениями, поскольку в процессе поиска часто возникает задача поиска символов из заданного интервала. Ниже перечислены некоторые часто используемые интервалы:

  • [0-9] — совпадает с любой десятичной цифрой от 0 до 9;
  • [a-z] — совпадает с любым символом нижнего регистра от а до z;
  • [A-Z] — совпадает с любым символом верхнего регистра от А до Z;
  • [a -Z] — совпадает с любым символом нижнего или верхнего регистра от а до Z.

Конечно, перечисленные выше интервалы всего лишь демонстрируют общий принцип. Например, вы можете воспользоваться интервалом [0-3] для обозначения любой десятичной цифры от 0 до 3 или интервалом [b-v] для обозначения любого символа нижнего регистра от b до v. Короче говоря, интервалы определяются совершенно произвольно.

Существует особый класс служебных символов, обозначающих количество повторений отдельного символа или конструкции, заключенной в квадратные скобки. Эти служебные символы (+, * и <. >) называются квантификаторами. Принцип их действия проще всего пояснить на примерах:

  • р+ означает один или несколько символов р, стоящих подряд;
  • р* означает ноль и более символов р, стоящих подряд;
  • р? означает ноль или один символ р;
  • р <2>означает два символа р, стоящих подряд;
  • р <2,3>означает от двух до трех символов р, стоящих подряд;
  • р <2,>означает два и более символов р, стоящих подряд.

Прочие служебные символы

Служебные символы $ и ^ совпадают не с символами, а с определенными позициями в строке. Например, выражение р$ означает строку, которая завершается символом р, а выражение ^р — строку, начинающуюся с символа р.

  • Конструкция [^a-zA-Z] совпадает с любым символом, не входящим в указаные интервалы (a-z и A-Z).
  • Служебный символ . (точка) означает «любой символ». Например, выражение р.р совпадает с символом р, за которым следует произвольный символ, после чего опять следует символ р.

Объединение служебных символов приводит к появлению более сложных выражений. Рассмотрим несколько примеров:

  • ^.<2>$ — любая строка, содержащая ровно два символа;
  • (.*) — произвольная последовательность символов, заключенная между и (вероятно, тегами HTML для вывода жирного текста);
  • p(hp)* — символ р, за которым следует ноль и более экземпляров последовательности hp (например, phphphp).

Иногда требуется найти служебные символы в строках вместо того, чтобы использовать их в описанном специальном контексте. Для этого служебные символы экранируются обратной косой чертой (\). Например, для поиска денежной суммы в долларах можно воспользоваться выражением \$[0-9]+, то есть «знак доллара, за которым следует одна или несколько десятичных цифр». Обратите внимание на обратную косую черту перед $. Возможными совпадениями для этого регулярного выражения являются $42, $560 и $3.

Стандартные интервальные выражения (символьные классы)

Для удобства программирования в стандарте POSIX были определены некоторые стандартные интервальные выражения, также называемые символьными классами (character classes). Символьный класс определяет один символ из заданного интервала — например, букву алфавита или цифру:

  • [[:alpha:]] — алфавитный символ (aA-zZ);
  • [[:digit:]]-цифра (0-9);
  • [[:alnum:]] — алфавитный символ (aA-zZ) или цифра (0-9);
  • [[:space:]] — пропуски (символы новой строки, табуляции и т. д.).

Функции PHP для работы с регулярными выражениями (POSIX-совместимые)

В настоящее время PHP поддерживает семь функций поиска с использованием регулярных выражений в стиле POSIX:

Описания этих функций приведены в следующих разделах.

Функция еrеg( ) ищет в заданной строке совпадение для шаблона. Если совпадение найдено, возвращается TRUE, в противном случае возвращается FALSE. Синтаксис функции ereg( ):

int ereg (string шаблон, string строка [, array совпадения])

Поиск производится с учетом регистра алфавитных символов. Пример использования ereg( ) для поиска в строках доменов .соm:

$is_com — ereg(«(\.)(com$)», $email):

// Функция возвращает TRUE, если $email завершается символами «.com»

// В частности, поиск будет успешным для строк

// «www.wjgilmore.com» и «someemail@apress.com»

Обратите внимание: из-за присутствия служебного символа $ регулярное выражение совпадает только в том случае, если строка завершается символами .com. Например, оно совпадет в строке «www.apress.com», но не совпадет в строке «www.apress.com/catalog».

Необязательный параметр совпадения содержит массив совпадений для всех подвыражений, заключенных в регулярном выражении в круглые скобки. В листинге 8.1 показано, как при помощи этого массива разделить URL на несколько сегментов.

Листинг 8.1. Вывод элементов массива $regs

// Разделить $url на три компонента: «http://www». «apress» и «com»

if ($www_url) : // Если переменная $www_url содержит URL

echo $regs[0]; // Вся строка «http://www.apress.com»

echo $regs[l]; // «http://www»

echo $regs[2]; // «apress»

echo $regs[3]; // «com» endif;

При выполнении сценария в листинге 8.1 будет получен следующий результат:

http://www.apress.com http://www apress com

Функция ereg_replace( ) ищет в заданной строке совпадение для шаблона и заменяет его новым фрагментом. Синтаксис функции ereg_replace( ):

string ereg_replace (string шаблон, string замена, string строке)

Функция ereg_replace( ) работает по тому же принципу, что и ereg( ), но ее возможности расширены от простого поиска до поиска с заменой. После выполнения замены функция возвращает модифицированную строку. Если совпадения

отсутствуют, строка остается в прежнем состоянии. Функция ereg_replace( ), как и еrеg( ), учитывает регистр символов. Ниже приведен простой пример, демонстрирующий применение этой функции:

$copy_date = «Copyright 1999»:

$copy_date = ereg_replace(«([0-9]+)». «2000», $copy_date);

print $copy_date: // Выводится строка «Copyright 2000»

У средств поиска с заменой в языке PHP имеется одна интересная возможность — возможность использования обратных ссылок на части основного выражения, заключенные в круглые скобки. Обратные ссылки похожи на элементы необязательного параметра-массива совпадения функции еrеg( ) за одним исключением: обратные ссылки записываются в виде \0, \1, \2 и т. д., где \0 соответствует всей строке, \1 — успешному совпадению первого подвыражения и т. д. Выражение может содержать до 9 обратных ссылок. В следующем примере все ссылки на URL в тексте заменяются работающими гиперссылками:

$url = «Apress (http://www.apress.com»);

Функция eregi( ) ищет в заданной строке совпадение для шаблона. Синтаксис функции eregi( ):

int eregi (string шаблон, string строка [, array совпадения])

Поиск производится без учета регистра алфавитных символов. Функция eregi( ) особенно удобна при проверке правильности введенных строк (например, паролей). Использование функции eregi( ) продемонстрировано в следующем примере:

print «Invalid password! Passwords must be from 8 through 10 characters in length.»;

// В результате выполнения этого фрагмента выводится сообщение об ошибке.

// поскольку длина строки «abc» не входит в разрешенный интервал

// от 8 до 10 символов.

Функция eregi_replасе( ) работает точно так же, как ereg_replace( ), за одним исключением: поиск производится без учета регистра символов. Синтаксис функции ereg_replace( ):

string eregi_replace (string шаблон, string замена, string строка)

Функция split( ) разбивает строку на элементы, границы которых определяются по заданному шаблону. Синтаксис функции split( ):

array split (string шаблон, string строка [, int порог])

Необязательный параметр порог определяет максимальное количество элементов, на которые делится строка слева направо. Если шаблон содержит алфавитные символы, функция spl it( ) работает с учетом регистра символов. Следующий пример демонстрирует использование функции split( ) для разбиения канонического IP-адреса на триплеты:

$ip = «123.345.789.000»; // Канонический IP-адрес

$iparr = split («\.», $ip) // Поскольку точка является служебным символом.

// ее необходимо экранировать.

print «$iparr[0]
«; // Выводит «123»

print «$iparr[1]
«; // Выводит «456»

print «$iparr[2]
«; // Выводит «789»

print «$iparr[3]
«; // Выводит «000»

Функция spliti( ) работает точно так же, как ее прототип split( ), за одним исключением: она не учитывает регистра символов. Синтаксис функции spliti( ):

array spliti (string шаблон, string строка [, int порог])

Разумеется, регистр символов важен лишь в том случае, если шаблон содержит алфавитные символы. Для других символов выполнение spliti( ) полностью аналогично split( ).

Вспомогательная функция sql_regcase( ) заключает каждый символ входной строки в квадратные скобки и добавляет к нему парный символ. Синтаксис функции sql_regcase( ):

string sql_regcase (string строка)

Если алфавитный символ существует в двух вариантах (верхний и нижний регистры), выражение в квадратных скобках будет содержать оба варианта; в противном случае исходный символ повторяется дважды. Функция sql_regcase( ) особенно удобна при использовании PHP с программными пакетами, поддерживающими регулярные выражения в одном регистре. Пример преобразования строки функцией sql_regcase( ):

$version = «php 4.0»;

// Выводится строка [Pp][Hh][Pp][ ][44][..][00]

Синтаксис регулярных выражений в стиле Perl

Perl ( http://www.perl.com ) давно считается одним из самых лучших языков обработки текстов. Синтаксис Perl позволяет осуществлять поиск и замену даже для самых сложных шаблонов. Разработчики РHР сочли, что не стоит заново изобретать уже изобретенное, а лучше сделать знаменитый синтаксис регулярных выражений Perl доступным для пользователей PHP. Так появились функции для работы с регулярными выражениями в стиле Perl.

Диалект регулярных выражений Perl не так уж сильно отличается от диалекта POSIX. В сущности, синтаксис регулярных выражений Perl является отдаленным потомком реализации POSIX, вследствие чего синтаксис POSIX почти совместим с функциями регулярных выражений стиля Perl.

Оставшаяся часть этого раздела будет посвящена краткому знакомству с диалектом регулярных выражений Perl. Рассмотрим простой пример:

Обратите внимание: строка food заключена между двумя косыми чертами. Как и в стандарте POSIX, вы можете создавать более сложные шаблоны при помощи квантификаторов:

Этот шаблон совпадает с последовательностью fo, за которой могут следовать дополнительные символы о. Например, совпадения будут обнаружены в строках food, fool и fo4. Рассмотрим другой пример использования квантификатора:

Шаблон совпадает с символом f, за которым следуют от 2 до 4 экземпляров символа о. К числу потенциальных совпадений относятся строки fool , fooool и foosball .

В регулярных выражениях Perl могут использоваться все квантификаторы, упомянутые в предыдущем разделе для регулярных выражений POSIX.

Метасимволы

Одной из интересных особенностей Perl является использование метасимволов при поиске. Метасимвол [Следует отметить, что авторское толкование термина «метасимвол» противоречит не только всем традициям, по и официальной документации PHP. — Примеч. перев. ] представляет собой алфавитный символ с префиксом \ — признаком особой интерпретации следующего символа. Например, метасимвол \d может использоваться при поиске денежных сумм:


Комбинация \d обозначает любую цифру. Конечно, в процессе поиска часто возникает задача идентификации алфавитно-цифровых символов, поэтому в Perl для них был определен метасимвол \w:

Этот шаблон совпадает с конструкциями, заключенными в угловые скобки, — например, тёгами HTML. Кстати, метасимвол \W имеет прямо противоположный смысл и используется для идентификации символов, не являющихся алфавитно-цифровыми.

Еще один полезный метасимвол, \b, совпадает с границами слов:

Поскольку метасимвол границы слова расположен справа от текста, этот шаблон совпадет в строках salsa и lisa, но не в строке sand. Противоположный метасимвол, \В, совпадает с чем угодно, кроме границы слова:

Шаблон совпадает в таких строках, как sand и Sally, но не совпадает в строке salsa.

Модификаторы

Модификаторы заметно упрощают работу с регулярными выражениями. Впрочем, модификаторов много, и в табл. 8.1 приведены лишь наиболее интересные из них. Модификаторы перечисляются сразу же после регулярного выражения — например, /string/i.

Таблица 8.1. Примеры модификаторов

m Фрагмент текста интерпретируется как состоящий из нескольких «логических строк». По умолчанию специальные символы ^ и $ совпадают только в начале и в конце всего фрагмента. При включении «многострочного режима» при помощи модификатора m^ и $ будут совпадать в начале и в конце каждой логической строки внутри фрагмента s По смыслу противоположен модификатору m — при поиске фрагмент интерпретируется как одна строка, а все внутренние символы новой строки игнорируются i Поиск выполняется без учета регистра символов

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

Функции PHP для работы с регулярными выражениями (Perl-совместимые)

В PHP существует пять функций поиска по шаблону с использованием Perl-совместимых регулярных выражений:

  • preg_match( );
  • preg_match_all( );
  • preg_replace( );
  • preg_split( );
  • preg_grep( ).

Эти функции подробно описаны в следующих разделах.

Функция pregjnatch( ) ищет в заданной строке совпадение для шаблона. Если совпадение найдено, возвращается TRUE, в противном случае возвращается FALSE. Синтаксис функции pregjnatch( ):

int pregjnatch (string шаблон, string строка [, array совпадения>)

При передаче необязательного параметра совпадения массив заполняется совпадениями различных подвыражений, входящих в основное регулярное выражение. В следующем примере функция preg_match( ) используется для проведения поиска без учета регистра:

$linе = «Vi is the greatest word processor ever created!»;

// Выполнить поиск слова «Vi» без учета регистра символов:

if (preg_match(«/\bVi\b\i», $line, $matcn)) :

print «Match found!»;

// Команда if в этом примере возвращает TRUE

Функция preg_match_all( ) находит все совпадения шаблона в заданной строке.

Синтаксис функции preg_match_all( ):

Int preg_match_all (string шаблон, string строка, array совпадения [, int порядок])

Порядок сохранения в массиве совпадения текста, совпавшего с подвыражениями, определяется необязательным параметром порядок. Этот параметр может принимать два значения:

  • PREG_PATTERN_ORDER — используется по умолчанию, если параметр порядок не указан. Порядок, определяемый значением PREG_PATTERN_ORDER, на первый взгляд выглядит не совсем логично: первый элемент (с индексом 0) содержит массив совпадений для всего регулярного выражения, второй элемент (с индексом 1) содержит массив всех совпадений для первого подвыражения в круглых скобках и т. д.;
  • PREG_SET_ORDER — порядок сортировки массива несколько отличается от принятого по умолчанию. Первый элемент (с индексом 0) содержит массив с текстом, совпавшим со всеми подвыражениями в круглых скобках для первого найденного совпадения. Второй элемент (с индексом 1) содержит аналогичный массив для второго найденного совпадения и т. д.

Следующий пример показывает, как при помощи функции preg_match_al( ) найти весь текст, заключенный между тегами HTML . :

$user_info = «Name: Rasmus Lerdorf
Title: PHP Guru«;

preg_match_all («/(.*) /U», Suserinfo. $pat_array);

print $pat_array[0][0].»
«.pat_array[0][l].»\n»:

Функция preg_repl ace( ) работает точно так же, как и ereg_replасе( ), за одним исключением — регулярные выражения могут использоваться в обоих параметрах, шаблон и замена. Синтаксис функции preg_replace( ):

mixed preg_replace (mixed шаблон, mixed замена, mixed строка [, int порог])

Необязательный параметр порог определяет максимальное количество замен в строке. Интересный факт: параметры шаблон и замена могут представлять собой масивы. Функция preg_replace( ) перебирает элементы обоих массивов и выполняет замену по мере их нахождения.

Функция preg_spl it( ) аналогична split( ) за одним исключением — параметр шаблон может содержать регулярное выражение. Синтаксис функции preg_split( ):

array preg_split (string шаблон, string строка [, int порог [, int флаги]])

Необязательный параметр порог определяет максимальное количество элементов, на которые делится строка. В следующем примере функция preg_split( ) используется для выборки информации из переменной.

$fields = preg_split(«/\+<1.>/», $user_info);

while ($x 0, если строка2 меньше, чем строка1.

В следующем фрагменте сравниваются две одинаковые строки:

if ((strcmp($string1. $string2)) == 0) :

print «Strings are equivalent!»; endif;

// Команда if возвращает TRUE

Функция strcasecmp( ) работает точно так же, как strcmp( ), за одним исключением — регистр символов при сравнении не учитывается. Синтаксис функции strcasecmp( ):

int strcasecmp (string cтpoкa1, string строка2)

В следующем фрагменте сравниваются две одинаковые строки:

if ((strcmp($string1, $string2)) == 0) :

print «Strings are equivalent!»;

// Команда if возвращает TRUE

Функция strspn( ) возвращает длину первого сегмента строки1, содержащего символы, присутствующие в строке2. Синтаксис функции strspn( ):

int strspn (string строка1, string строка2)

Следующий фрагмент показывает, как функция strspn( ) используется для проверки пароля:

if (strspn($password, «1234567890») != strlen($password)) :

print «Password cannot consist solely of numbers!»;

Функция strcspn( ) возвращает длину первого сегмента строки1, содержащего символы, отсутствующие в строке2. Синтаксис функции strcspn( ):

int strcspn (string строка1, string строка2)

В следующем фрагменте функция strcspn( ) используется для проверки пароля:

if (strcspn($password, «1234567890») == 0) :

print «Password cannot consist solely of numbers!»;

Обработка строковых данных без применения регулярных выражений

При обработке больших объемов информации функции регулярных выражений сильно замедляют выполнение программы. Эти функции следует применять лишь при обработке относительно сложных строк, в которых регулярные выражения действительно необходимы. Если же анализ текста выполняется по относительно простым правилам, можно воспользоваться стандартными функциями PHP, которые заметно ускоряют обработку. Все эти функции описаны ниже.

Функция strtok( ) разбивает строку на лексемы по разделителям, заданным вторым параметром. Синтаксис функции strtok( ):

string strtok (string строка, string разделители)

У функции strtok( ) есть одна странность: чтобы полностью разделить строку, функцию необходимо последовательно вызвать несколько раз. При очередном вызове функция выделяет из строки следующую лексему. При этом параметр строка задается всего один раз — функция отслеживает текущую позицию в строке до тех пор, пока строка не будет полностью разобрана на лексемы или не будет задан новый параметр строка. Следующий пример демонстрирует разбиение строки по нескольким разделителям:

$info = «WJ Gi1more:wjgilmore@hotmail.com | Columbus, Ohio»;

// Ограничители — двоеточие (:), вертикальная черта (|) и запятая (.) $tokens = «:|,»;

$tokenized = strtok($info, $tokens);

// Вывести элементы массива $tokenized

echo «Element = $tokenized
«;

// Обратите внимание: при последующих вызовах strtok

// первый аргумент не передается

Функция parse_str( ) выделяет в строке пары «переменная-значение» и присваивает значения переменных в текущей области видимости. Синтаксис функции parse_str( ):

void parse_str (string строка)

Функция parse_str( ) особенно удобна при обработке URL, содержащих данные форм HTML или другую расширенную информацию. В следующем примере анализируется информация, переданная через URL. Строка представляет собой стандартный способ передачи данных между страницами либо откомпилированных в гиперссылке, либо введенных в форму HTML:

// После выполнения parse_str( ) доступны следующие переменные:

Поскольку эта функция создавалась для работы с URL, она игнорирует символ амперсанд (&).

Работа с формами HTML в PHP описана в главе 10.

Функция explode( ) делит строку на элементы и возвращает эти элементы в виде массива. Синтаксис функции explode( ):

array explode (string разделитель, string строка [, int порог])

Разбиение происходит по каждому экземпляру разделителя, причем количество полученных фрагментов может ограничиваться необязательным параметром порог. Разделение строки функцией explode( ) продемонстрировано в следующем примере:

$info = «wilson | baseball | indians»;

$user = explode(«|», $info);

Функция explode( ) практически идентична функции регулярных выражений POSIX split( ), описанной выше. Главное различие заключается в том, что передача регулярных выражений в параметрах допускается только при вызове split( ).

Если функция explode( ) разделяет строку на элементы массива, то ее двойник — функция implode( ) — объединяет массив в строку. Синтаксис функции implode( ):

string implode (string разделитель, array фрагменты)

Формирование строки из массива продемонстрировано в следующем примере:

$ohio_cities = array («Columbus», «Youngstown», «Cleveland», «Cincinnati»);

$city_string = implode(«l», $ohio_cities);

// $city_string = «Columbus | Youngstown | Cleveland | Cincinnati»;

У implode( ) имеется псевдоним — функция join( ).

Функция strpos( ) находит в строке первый экземпляр заданной подстроки. Синтаксис функции strpos( ):

int strpos (string строка, string подстрока [, int смещение])


Необязательный параметр offset задает позицию, с которой должен начинаться поиск. Если подстрока не найдена, strpos( ) возвращает FALSE (0).

В следующем примере определяется позиция первого вхождения даты в файл журнала:

// В какой позиции в журнале впервые встречается 1999 год?

$pos = strpos($log, «1999»);

// $pos = 95. поскольку первый экземпляр «1999»

// находится в позиции 95 строки, содержащейся в переменной $log

Функция strrpos( ) находит в строке последний экземпляр заданного символа. Синтаксис функции strrpos( ):

int strpos (string строка, char символ)

По возможностям эта функция уступает своему двойнику — функции strpos( ), поскольку она позволяет искать только отдельный символ, а не всю строку. Если во втором параметре strrpos( ) передается строка, при поиске будет использован только ее первый символ.

Функция str_replace( ) ищет в строке все вхождения заданной подстроки и заменяет их новой подстрокой. Синтаксис функции str_replace( ):

string str_replace (string подстрока, string замена, string строка)

Функция substr_replace( ), описанная ниже в этом разделе, позволяет провести заме ну лишь в определенной части строки. Ниже показано, как функция str_replace( ) используется для проведения глобальной замены в строке.

Если подстрока ни разу не встречается в строке, исходная строка не изменяется:

$favorite_food = «My favorite foods are ice cream and chicken wings»;

$favorite_food = str_replace(«chicken_wings», «pizza», $favohte_food);

// $favorite_food = «My favorite foods are ice cream and pizza»

Функция strstr( ) возвращает часть строки, начинающуюся с первого вхождения заданной подстроки. Синтаксис функции strstr( ):

string strstr (string строка, string подстрока)

В следующем примере функция strstr( ) используется для выделения имени домена из URL:

$url = «http://www.apress.com»; $domain — strstr($url, «.»);

Функция substr( ) возвращает часть строки, начинающуюся с заданной начальной позиции и имеющую заданную длину. Синтаксис функции substr( ):

string substr (string строка, int начало [, int длина])

Если необязательный параметр длина не указан, считается, что подстрока начинается с заданной начальной позиции и продолжается до конца строки. При использовании этой функции необходимо учитывать четыре обстоятельства:

  • если параметр начало положителен, возвращаемая подстрока начинается с позиции строки с заданным номером;
  • если параметр начало отрицателен, возвращаемая подстрока начинается с позиции (длина строки — начало);
  • если параметр длина положителен, в возвращаемую подстроку включаются все символы от позиции начало до позиции начало+длина. Если последняявеличина превышает длину строки, возвращаются символы до конца строки;
  • если параметр длина отрицателен, возвращаемая подстрока заканчивается на заданном расстоянии от конца строки.

Помните о том, что параметр начало определяет смещение от первого символа строки; таким образом, возвращаемая строка в действительности начинается с символа с номером (начало + 1).

Следующий пример демонстрирует выделение части строки функцией substr( ):

$car = «1944 Ford»; Smodel = substr($car, 6);

Пример с положительным параметром длина:

$model = substr($car, 0, 4);

Пример с отрицательным параметром длина:

$model = substr($car, 2, -5);

Функция substr_count( ) возвращает количество вхождений подстроки в заданную строку. Синтаксис функции substr_count( ):

int substr_count (string строка, string подстрока)

В следующем примере функция substr_count( ) подсчитывает количество вхождений подстроки ain:

$tng_twist = «The rain falls mainly on the plains of Spain»;

$count = substr_count($tng_twist, «ain»);

Функция substr_replace( ) заменяет часть строки, которая начинается с заданной позиции. Если задан необязательный параметр длина, заменяется фрагмент заданной длины; в противном случае производится замена по всей длине заменяющей строки. Синтаксис функции substr_replace( ):

string substr_replace (string строка, string замена, int начало [, int длина])

Параметры начало и длина задаются по определенным правилам:

  • если параметр начало положителен, замена начинается с заданной позиции;
  • если параметр начало отрицателен, замена начинается с позиции (длина строки -начало);
  • если параметр длина положителен, заменяется фрагмент заданной длины;
  • если параметр длина отрицателен, замена завершается в позиции (длина строки -длина).

Простая замена текста функцией substr_replace( ) продемонстрирована в следующем примере:

$favs = » ‘s favorite links»;

// Параметры «0, 0» означают, что заменяемый фрагмент начинается

// и завершается в первой позиции строки.

$favs — substr_replace($favs, $name, 0, 0);

Alessia’s favorite links

Преобразование строк и файлов к формату HTML и наоборот

Преобразовать строку или целый файл к формату, подходящему для просмотра в web-браузере (или наоборот), проще, чем может показаться на первый взгляд. В PHP для этого существуют специальные функции.

Преобразование текста в HTML

Быстрое преобразование простого текста к формату web-браузера — весьма распространенная задача. В ее решении вам помогут функции, описанные в этом разделе.

Функция nl2br( ) заменяет все символы новой строки (\n) эквивалентными конструкциями HTML
.

Синтаксис функции nl2br( ):

string nl2br (string строка)

Символы новой строки могут быть как видимыми (то есть явно включенными в строку), так и невидимыми (например, введенными в редакторе). В следующем примере текстовая строка преобразуется в формат HTML посредством замены символов \n разрывами строк:

// Текстовая строка, отображаемая в редакторе.

Party Sauce recipe:

1 can stewed tomatoes

3 tablespoons fresh lemon juice

Stir together, server cold.»;

// Преобразовать символы новой строки в

При последующем выводе $html_recipe браузеру будет передан следующий текст в формате HTML:

Party Sauce recipe:

1 can stewed tomatoes

3 tablespoons fresh lemon juice

Stir together, server cold.

Функция htmlentities( ) преобразует символы в эквивалентные конструкции HTML. Синтаксис функции htmlentities:

string htmlentities (string строка)

В следующем примере производится необходимая замена символов строки для вывода в браузере:

$user_input = «The cookbook, entitled Cafe Francaise’ costs преобразуется в >.

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

Следующий пример демонстрирует удаление потенциально опасных символов функцией htmlspeclalchars( ):

$user_input = «I just can’t get «enough» of PHP & those fabulous cooking recipes!»;

// $conv_input = «I just can’t > of PHP &amp those fabulous cooking

Если функция htmlspecialchars( ) используется в сочетании с nl2br( ), то последнюю следует вызывать после htmlspecialchars( ). В противном случае конструкции
, сгенерированные при вызове nl2br( ), преобразуются в видимые символы.

Функция get_html_translation_table( ) обеспечивает удобные средства преобразования текста в эквиваленты HTML Синтаксис функции get_htrril_translation_table( ):

string get_html_translation_table (int таблица)

Функция get_html_translation_table( ) возвращает одну из двух таблиц преобразования (определяется параметром таблица), используемых в работе стандартных функций htmlspecialchars( ) и htmlentities( ). Возвращаемое значение может использоваться в сочетании с другой стандартной функцией, strtr( ) (см. далее), для преобразования текста в код HTML.

Параметр таблица принимает одно из двух значений:

В следующем примере функция get_html_translation_table( ) используется при преобразовании текста в код HTML:

$string = «La pasta e il piatto piu amato in Italia»;

print strtr($string, $translate);

// Специальные символы преобразуются в конструкции HTML

// и правильно отображаются в браузере.

Кстати, функция array_flip( ) позволяет провести преобразование текста в HTML в обратном направлении и восстановить исходный текст. Предположим, что вместо вывода результата strtr( ) в предыдущем примере мы присвоили его переменной $translated string.

В следующем примере исходный текст восстанавливается функцией array_flip( ):

$translated_string — «La pasta é il piatto piú amato in Italia»;

$original_string = strtr($translated_string, $translate);

// $original_string = «La pasta e il piatto piu amato in Italia»;

Функция strtr( ) транслирует строку, то есть заменяет в ней все символы, входящие в строку источник, соответствующими символами строки приемник. Синтаксис функции strtr( ):

string strtr (string строка, string источник, string приемник)

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

Существует альтернативный синтаксис вызова strtr( ) с двумя параметрами; в этом случае второй параметр содержит ассоциативный массив, ключи которого соответствуют заменяемым подстрокам, а значения — заменяющим подстрокам. В следующем примере теги HTML заменяются XML-подобными конструкциями:

Today In PHP-Powered News»

print strtr($string, $source);


// Выводится строка » Today in PHP-Powered News «

Преобразование HTML в простой текст

Иногда возникает необходимость преобразовать файл в формате HTML в простой текст. Функции, описанные ниже, помогут вам в решении этой задачи.

Функция strip_tags( ) удаляет из строки все теги HTML и PHP, оставляяв ней только текст. Синтаксис функции strip_tags( ):

string strip_tags (string строка [, string разрешенные_тerи])

Необязательный параметр разрешенные_теги позволяет указать теги, которые должны пропускаться в процессе удаления.

Ниже приведен пример удаления из строки всех тегов HTML функцией strip_tags( ):

$user_input = «I just love PHP and gourment recipes!»;

// $stripped_input = «I just love PHP and gourmet recipes!»;

В следующем примере удаляются не все, а лишь некоторые теги:

$strip_input = strip_tags ($user_input, «»);

// $strip_input = «I love to eat!!»;

Удаление тегов из текста также производится функцией fgetss( ), описанной в главе 7.

Хотя функция get_meta_tags( ) и не имеет прямого отношения к преобразованию текста, зто весьма полезная функция, о которой следует упомянуть. Синтаксис функции get_meta_tags( ):

array get_meta_tags (string имя_файла/URL [, int включение_пути])

Функция get_meta_tags( ) предназначена для поиска в файле HTML тегов МЕТА.

Теги МЕТА содержат информацию о странице, используемую главным образом поисковыми системами. Эти теги находятся внутри пары тегов . . Применение тегов МЕТА продемонстрировано в следующем фрагменте (назовем его example.html, поскольку он будет использоваться в листинге 8.2):

Функция get_meta_tags( ) ищет в заголовке документа теги, начинающиеся словом МЕТА, и сохраняет имена тегов и их содержимое в ассоциативном массиве. В листинге 8.2 продемонстрировано применение этой функции к файлу example.html.

Листинг 8.2. Извлечение тегов МЕТА из файла HTML функцией get_meta_tags( )

// Переменная $meta_tags содержит массив со следующей информацией:

// $meta_tags[«keywords»] = «gourmet. PHP. food. code, recipes, chef, programming. Web»:

// $meta_tags[«description»] = «PHP Recipes provides savvy readers with the latest in PHP

programming and gourmet cuisine»;

// $meta_tags[«author»] = «WJ Gilmore»;

Интересная подробность: данные тегов МЕТА можно извлекать не только из файлов, находящихся на сервере, но и из других URL.

Теги МЕТА и их использование превосходно описаны в статье Джо Берна (Joe Burn) «So, You Want a Meta Command, Huh?» на сайте HTML Goodies: http://htmlgoodies.earthweb.com/tutors/meta.html .

Преобразование строки к верхнему и нижнему регистру

В PHP существует четыре функции, предназначенных для изменения регистра строки:

Все эти функции подробно описаны ниже.

Функция strtolower( ) преобразует все алфавитные символы строки к нижнему регистру. Синтаксис функции strtolower( ):

string strtolower(string строка)

Неалфавитные символы функцией не изменяются. Преобразование строки к нижнему регистру функцией strtolower( ) продемонстрировано в следующем примере:

$sentence = «COOKING and PROGRAMMING PHP are my TWO favorite pastimes!»;

// После вызова функции $sentence содержит строку

// «cooking and programming php are my two favorite pastimes!»

Строки можно преобразовывать не только к нижнему, но и к верхнему регистру. Преобразование выполняется функцией strtoupper( ), имеющей следующий синтаксис:

string strtoupper (string строка)

Неалфавитные символы функцией не изменяются. Преобразование строки к верхнему регистру функцией strtoupper( ) продемонстрировано в следующем примере:

$sentence = «cooking and programming PHP are my two favorite pastimes!»;

// После вызова функции $sentence содержит строку

// «COOKING AND PROGRAMMING PHP ARE MY TWO FAVORITE PASTIMES!»

Функция ucfirst( ) преобразует к верхнему регистру первый символ строки — при условии, что он является алфавитным символом. Синтаксис функции ucfirst( ):

string ucfirst (string строка)

Неалфавитные символы функцией не изменяются. Преобразование первого символа строки функцией ucfirst( ) продемонстрировано в следующем примере:

// После вызова функции $sentence содержит строку

// «Cooking and programming PHP are mу two favorite pastimes!»

Функция ucwords( ) преобразует к верхнему регистру первую букву каждого слова в строке. Синтаксис функции ucwords( ):

string ucwords (string строка»)

Неалфавитные символы функцией не изменяются. «Слово» определяется как последовательность символов, отделенная от других элементов строки пробелами. В следующем примере продемонстрировано преобразование первых символов слов функцией ucwords( ):

$sentence = «cooking and programming PHP are my two favorite pastimes!»;

// После вызова функции $sentence содержит строку

// «Cooking And Programming PHP Are My Two Favorite Pastimes!»

Проект: идентификация браузера

Каждый программист, пытающийся создать удобный web-сайт, должен учитывать различия в форматировании страниц при просмотре сайта в разных браузерах и операционных системах. Хотя консорциум W3 (http://www.w3.org) продолжает публиковать стандарты, которых должны придерживаться программисты при создании web-приложений, разработчики браузеров любят дополнять эти стандарты своими маленькими «усовершенствованиями», что в конечном счете вызывает хаос и путаницу. Разработчики часто решают эту проблему, создавая разные страницы для каждого типа браузера и операционной системы — при этом объем работы значительно увеличивается, но зато итоговый сайт идеально подходит для любого пользователя. Результат — хорошая репутация сайта и уверенность в том, что пользователь посетит его снова.

Чтобы пользователь мог просматривать страницу в формате, соответствующем специфике его браузера и операционной системы, из входящего запроса на получение страницы извлекается информация о браузере и платформе. После получения необходимых данных пользователь перенаправляется на нужную страницу.

Приведенный ниже проект (sniffer.php) показывает, как использовать функции PHP для работы с регулярными выражениям с целью получения информации по запросам. Программа определяет тип и версию браузера и операционной системы, после чего выводит полученную информацию в окне браузера. Но прежде чем переходить к непосредственному анализу программы, я хочу представить один из главных ее компонентов — стандартную переменную PHP $HTTP_USER_AGENT. В этой переменной в строковом формате хранятся различные сведения о браузере и операционной системе пользователя — именно то, что нас интересует. Эту информацию можно легко вывести на экран всего одной командой:

При работе в Internet Explorer 5.0 на компьютере с Windows 98 результат будет выглядеть так:

Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)

Для Netscape Navigator 4.75 выводятся следующие данные:

Mozilla/4.75 (Win98; U)

Sniffer.php извлекает необходимые данные из $HTTP_USER_AGENT при помощи функций обработки строк и регулярных выражений. Алгоритм программы на псевдокоде:

  • Определить две функции для идентификации браузера и операционной системы: browser_info( ) и opsys_info( ). Начнем с псевдокода функции browser_info( ).
  • Определить тип браузера, используя функцию егед( ). Хотя эта функция работает медленнее упрощенных строковых функций типа strstr( ), в данном случае она удобнее, поскольку регулярное выражение позволяет определить версию браузера.
  • Воспользоваться конструкцией if/elseif для идентификации следующих браузеров и их версий: Internet Explorer, Opera, Netscape и браузер неизвестного типа.
  • Вернуть информацию о типе и версии браузера в виде массива.
  • Функция opsys_info( ) определяет тип операционной системы. На этот раз используется функция strstr( ), поскольку тип ОС определяется и без применения регулярных выражений.
  • Воспользоваться конструкцией if/elseif для идентификации следующих систем: Windows, Linux, UNIX, Macintosh и неизвестная операционная система.
  • Вернуть информацию об операционной системе.

Листинг 8.3. Идентификация типа браузера и операционной системы клиента

Вот и все! Например, если пользователь работает в браузере Netscape 4.75 на компьютере с системой Windows, будет выведен следующий результат:

Browser Type: Netscape

Browser Version: 4.75

Operating System: Windows

В следующей главе вы научитесь осуществлять переходы между страницами и даже создавать списки стилей (style sheets) для конкретных операционной системы и браузера.

Итоги

В этой главе был изложен довольно обширный материал. Какой прок от языка программирования, если в нем нельзя работать с текстом? Мы рассмотрели следующие темы:

  • общие сведения о регулярных выражениях в стилях POSIX и Perl;
  • стандартные функции PHP для работы с регулярными выражениями;
  • изменение длины строки;
  • определение длины строки;
  • альтернативные функции PHP для обработки строковой информации;
  • преобразование простого текста в HTML и наоборот;
  • изменение регистра символов в строках.

Следующая глава открывает вторую часть книги — кстати, мою любимую. В ней мы начнем знакомиться со средствами PHP, ориентированными на Web, рассмотрим процесс динамического создания содержимого, включение файлов и построение общих шаблонов. В дальнейших главах части 2 рассматриваются работа с формами HTML, базы данных, отслеживание данных сеанса и нетривиальные средства работы с шаблонами. Держитесь — начинается самое интересное!

Функции работы со строками в PHP

Частная коллекция качественных материалов для тех, кто делает сайты

  • Фотошоп-мастер2000+ уроков по фотошопу
  • Фото-монстр300+ уроков для фотографов
  • Видео-смайл200+ уроков по видеообработке
  • Жизнь в стиле «Кайдзен» Техники и приемы для гармоничной и сбалансированной жизни

В этом разделе помещены уроки по PHP скриптам, которые Вы сможете использовать на своих ресурсах.

Фильтрация данных с помощью zend-filter

Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

Совет: отправка информации в Google Analytics через API

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

Подборка PHP песочниц

Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

Совет: активация отображения всех ошибок в PHP

При поднятии PHP проекта на новом рабочем окружении могут возникнуть ошибки отображение которых изначально скрыто базовыми настройками. Это можно исправить, прописав несколько команд.

Агент


PHP парсер юзер агента с поддержкой Laravel, работающий на базе библиотеки Mobile Detect.

Функции работы со строками в PHP

Всем привет!
Продолжаем изучать основы PHP с нуля!
В этом уроке я расскажу и покажу некоторые функции для работы со строками, например, как в строке сделать замену, определить длину строки, удалить все HTML-теги из строки и т.д.
Вот список названий функций, о которых пойдет речь в этом уроке:

chunk_split()
chunk_split() – функция php применяется для разделения строки на фрагменты.

string — строка для разделения
length — число, которое определяет длину кусков (по умолчанию 76).
end — строка, которая указывает, что должно быть в конце каждого куска.

Что я сделал? Я строку «StepkinBlog.ru» поделил на фрагменты. Через каждые 2 символа в строке будут выводиться две буквы с тремя точками «…» и с новой строки.

convert_cyr_string()
convert_cyr_string() – эта функция php преобразовывает строки из одной кириллической кодировки в другую.

« str » – эта строка, которая будет перекодироваться.
« входная_кодировка » и « выходная_кодировка » — я думаю, тут все понятно. Задаются здесь параметры кодировки одной буквой.

  • k — koi8-r
  • w — windows-1251
  • i — iso8859-5
  • a — x-cp866
  • d — x-cp866
  • m — x-mac-cyrillic

Задание: перекодируем фразу «Привет всем!» из кодировки windows-1251 в koi8-r и обратно.

Я перекодировал слово — ‘Привет всем!’ в koi8-r. Вот результат — ‘рТЙЧЕФ ЧУЕН!’
Теперь перекодируем слово ‘рТЙЧЕФ ЧУЕН!’ в win. Вот результат — ‘Привет всем!’

bin2hex()
bin2hex() — производит преобразование символьных данных в шестнадцатеричный вид.

convert_uuencode()
convert_uuencode()
— кодирует данные в формат uuencode

«Мой блог — StepkinBlog.ru» перекодируется вот в такие символы:

Если нужно расшифровать, то эти перекодированные символы вставляете в коде вместо текста «Мой блог — StepkinBlog.ru»:

Мой блог — StepkinBlog.ru

md5()
md5() — возвращает MD5-хэш строки

str_repeat()
str_repeat() — возвращает повторение строки заданное количество раз.

Привет и так 5 раз Привет и так 5 раз Привет и так 5 раз Привет и так 5 раз Привет и так 5 раз

str_replace()
str_replace() — производит замену одних символов в строке другими.

search — строка или массив поиска
replace — строка или массив замены
subject — строка или массив, где будет сделана замена.

С добрым утром, Степа!

str_shuffle()
str_shuffle() — возвращает строку с переставленными в ней символами случайным образом.

strip_tags()
strip_tags() – удаляет HTML и PHP тэги из строки

PHP — язык программирования.

PHP — язык программирования.

strrev()
strrev()
— переворот строки

UR.GOLBnikpetS еголб ан хищюаничан ялд PHP

strtolower()
strtolower() — преобразует буквенные символы из верхнего регистра в нижний.

php на блоге stepkinblog.ru

strtoupper()
strtoupper() — преобразует буквенные символы из нижнего регистра в верхний.

substr_replace()
substr_replace() — заменяет часть строки другой строкой.

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

Замена всей строки
в начале Строка на php
Строка на php в конце
Строка Я ПО СЕРЕДИНКЕ на php

substr()
substr()
— вырезает и возвращает подстроку из строки.

Если нужно вырезать слово «блог» и вывести на экран, то вот так:

Как видите, в коде я начал вырезку с 4 символа (пробел включаем в символ) и указал, сколько символов нужно вырезать, у меня в примере 4.

ucfirst()
ucfirst() – эта функция изменяет регистр первого символа в строке на верхний.

ucwords()
ucwords() — эта функция изменяет регистр первого символа в каждом слове строки.

strlen()
strlen()
— количество символов в строке

str_pad()
str_pad() – эта функция дополняет строку другой строкой до заданной длины

Теперь попробуем разместить дополнительную строку слева:

Конечно, функций для работы со строками намного больше, но я решил разместить в статье только самые интересные и полезные. Если захотите больше строковых функций, то можете найти их в Интернете.

codedokode / Функции работы со строками в PHP и utf-8.md

Статья переехала в мой гитхаб: https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md . Ниже идет устаревшая и неточная версия.

Некоторые функции PHP ( strlen , substr , а также обращение к строке как к массиву: $str[0] ) не работают с многобайтовыми кодировками (вроде utf-8). В utf-8 1 символ закодирован с помощью от 1 до 6 байтов, а эти функции думают, что 1 буква всегда кодируется одним байтом. По этой причине они ломают символы, в результате получаются битые символы и ничего не работает. Потому вместо них надо использовать mb_ функции например mb_strlen , mb_substr . Вместо доступа к строке как к массиву надо использовать mb_substr .

Если тебе интересно, почему эти функции поддерживают только однобайтные кодировки, а не многобайтные, то причина в том, что они очень старые и написаны в то время (лет 40 назад) когда utf-8 и многобайтных кодировок еще не было.

Давай разберем пример. Допустим, у нас есть строка из русской буквы «щ» в кодирове utf-8. Попытаемся взять первую букву с помощью неправильной функции:

Буква «щ» кодируется в utf-8 как 2 байта: 209 137 (я взял информацию тут: http://www.utf8-chartable.de/unicode-utf8-table.pl?start=1024&utf8=dec ). substr отрезает от строки не первую букву, а первый байт. Это значит, что в $x он положит 1 байт с кодом 209 . В utf-8 это неверная последовательность, она не соответвует никакому символу (так как после 209 обязательно должно идти второе число). Ideone может вообще отказаться что-то отображать, встретив такой код.

То же самое, когда ты обращаешься к строке как к массиву: $s[0] . Эта команда берет не первую букву, а только первый байт строки. Естественно, такая программа не будет работать.

Функция strlen считает число байт (не букв) в строке. То есть в данном случае strlen($s) вернет нам 2.

Латинница и цифры кодируются в utf-8 одним байтом, с ними это работает, но все равно, не надо использовать эти функции — это слишком ненадежно и легко сделать ошибку.

Также, чтобы работать с русскими (и другими нелатинскими) буквами в регулярках, надо ставить в конце флаг u : preg_match(«/[абвг]/u», $string) . Иначе preg_match будет думать что работает с однобайтной кодировкой и будет видеть не одну букву, а 2 latin1-символа (так как русская буква кодируется как 2 байта). Например, буква л кодирующаяся как 208 187 будет восприниматься как 2 символа с кодами 208 и 187 , то есть л (кодировка latin-1: http://en.wikipedia.org/wiki/ISO/IEC_8859-1#Codepage_layout ). Таким образом, регулярка будет работать некорректно и найдет не то.

Вывод: используй mb_* функции. Не используй доступ к строке как к массиву. В регулярных выражениях используй флаг u (он говорит что используется utf-8 а не однобайтовая кодировка).

Некоторые строковые функции без префикса mb тем не менее корректно работают с utf-8 и их можно использовать. Вот они: strtr (если передавать массив), str_replace , str_repeat , explode , addslashes , trim .

Не работают с utf-8: strrev , strlen , substr , strpos , ucfirst , wordwrap , str_pad и большинство других строковых функций, для работы которых нужно считать число символов. Не работает задание ширины в функциях вроде sprintf и printf .

Строковые функции

Функция addcslashes() возвращает строку где перед каждым заданным символом устанавливается обратный слэш

Функция addslashes() возвращает строку с установленным обратным слэшом перед следующими символами: одиночные кавычки (‘), двойные кавычки («), обратный слэш (\), NULL

Функция bin2hex() преобразует строку с бинарными данными в шестнадцатиричное представление. Преобразование производится побайтно Функция chr() используется для получения символа из кодировке ASCII .

Функция convert_cyr_string преобразует данные из одной кириллической кодировки в другую.

Функция convert_uudecode возращает раскодированные данные из uudecode.

Список известных функций для работы со строками на языке php.

echo – выводит одну или более строк.
explode – разбивает строку на подстроки.
md5 – возвращает MD5 хэш строки.
htmlentities – преобразует символы в соответствующие HTML сущности.
htmlspecialchars – преобразует специальные символы в HTML сущности.
implode – объединяет элементы массива в строку.
trim – удаляет пробелы из начала и конца строки.
ltrim – удаляет пробелы из начала строки.
rtrim – удаляет пробелы из конца строки.
str_repeat – возвращает повторяющуюся строку.
str_replace – заменяет строку поиска на строку замены.
str_split – преобразует строку в массив.
strrev – переворачивает строку.
strlen – возвращает длину строки.

Функции PHP для работы со строками (substr, str_replace, strpos и др.)

13 июня 2010 19 Рубрика: PHP

« Предыдущая запись
Окна на jQuery в стиле Windows 7 – плагин AeroWindow
Следующая запись »
Как защититься от xss атаки и устранить уязвимость

Всем добрый день/вечер/ночь/утро (нужное подчеркнуть)! Сегодня я решил поделиться с вами одной полезной вещью, связанной со строковыми функциями в PHP. Не знаю как вы, а я до сих пор путаю, что делает substr, а что strstr, а что strchr. И вот хоть ты тресни, кроме нескольких функций, все перемешались в голове.

Вспомнить какая функция что значит мне обычно помогала одна базовая книжка по PHP — там коротко, доходчиво и с примерами разобраны основные строковые функции. Однако у этого было несколько минусов.

Во-первых, там была лишь некоторая часть функций работы со строками, в которых были рассмотрены только по одному базовому примеру. Во-вторых книжка всегда была дома, носить её куда-то — был полный дискомфорт, не говоря о том, что из 400-500 страниц нужными были только 3-4.

В связи с этим я решил создать таблицу большинством используемых строковых функций PHP, где было бы всё кратко описано и даны основные примеры и результаты этих примеров. Собственно по результатам примеров и по примерам я обычно и искал нужную мне функцию.

Фрагмент таблицы предлагаю глянуть чуть ниже, чтобы было ясно о чём речь.

Функции substr, str_replace, strpos, strlen, strstr, strtolower, stripslashes, strrpos и др.

Возвращает часть строки, начинающейся с символа число и количеством символов длина.

substr ( «Текстовая строка» , 1, 3 );

substr ( «Текстовая строка» , -10, 3 );

substr ( «Текстовая строка» , 9, -3 );

str_replace (строка1, строка2, строка [, число ])

Заменяет в строке все вхождения строка1 на строка2. Начиная с PHP5 можно задавать число замен.

str_replace ( «%div_name%» , «new_id» , «

str_replace ( array ( «Есть» , «хорошо» ), array ( «Пить» , «плохо» ), ‘Есть – это хорошо’ );

Пить – это плохо

Возвращает позицию первого вхождения строка2 в строка1. Числом можно задавать номер символа, с которого начинать поиск

strpos( «Текстовая строка» , «строка» );

Возвращает длину строки

strlen( «Текстовая строка» );

strstr (строка1, строка2)

Возвращает часть строки1 начиная с первого вхождения строки2 до конца строки1.

strstr( «Текстовая строка» , «ст» );

Переводит все символы строки в нижний регистр

strtolower( «Текстовая СТРОКА» );

Удаляет экранирование символов

strrpos (строка1, строка2 [, число ])

Возвращает позицию последнего вхождения строка2 в строка1. Если строка не найдена, то возвращено будет false. Числом можно задавать номер символа, с которого начинать поиск

strrpos( «Текстовая строка» , «ст» );

Полную таблицу можно посмотреть или же скачать в формате Word по ссылкам ниже (и между прочим бесплатно и без всяких смс — прим.ред.). Распечатывайте и держите под рукой — всегда пригодится =). Конечно, там нет функций форматирования строк и некоторых функций, которые связаны с массивами. Что касается вторых — то будет в будущем сделан пост, похожий на этот, где они и будут рассмотрены

И напоследок кину Вам обоинку широкоформатную с Ford Mustang Shelby GT Convertible. Уж не знаю как Вы, а я обожаю мустангов=).

Илон Маск рекомендует:  Что такое код swfmovie &#62;setframes
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL