Понятие об основных строковых функциях php. Строковые функции в PHP

Основные в php строковые функции необходимо знать любому веб-программисту, так как строка в РНР — это самый главный тип данных. Длина строки практически ничем не ограничена (разве что размером памяти, занимаемым сценарием и физическим остатком ресурсов компьютера), поэтому в строку можно прочитать файл среднего размера и обработать его. Также к строке можно привести любой объект с помощью функции serialize().

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

Перечень полезных строковых функций PHP удобнее всего представить в виде таблицы. Функции приводятся без параметров — просто название функции и ее краткое описание. Далее мы рассмотрим некоторые из этих функций отдельно.

Функция Описание
chop() Удаляет пробельные символы в конце строки
convert_cyr_string() Используется для преобразования кодировок русского языка
explode() Выделяет подстроки (поля) из строки
HtmlSpecialChars() Заменяет специальные символы их HTML-эквивалентами, например < будет заменено эквивалентом <
ltrim() Похожа на trim(), но удаляет пробельные символы только в начале строки
md5() Кодирует указанную строку с помощью алгоритма MD5
nl2br() Заменяет все символы новой строки (\п) тегом
. Очень полезная функция в веб-программировании
pack() Запаковывает бинарные данные
str_replace() Используется для замены в строке
strcasecmp() To же, что и предыдущая функция, но производит сравнение без учета регистра символов
strcmp() Используется для сравнения строк
strip_tags() Удаляет все HTML-теги из строки
strlen() Определяет длину строки
strpos() Производит поиск подстроки в строке
strtolower() Преобразует все символы строки в нижний регистр
strtoupper() Преобразует все символы строки в верхний регистр
substr() Возвращает определенную подстроку
trim() Функция помогает избавиться от пробельных символов в начале и в конце строки
unpack() Распаковывает бинарные данные
urldecode() Раскодирует строку, которая была ранее закодирована с помощью urlencode()
urlencode() Кодирует строку для ее передачи в URL (символы, которые не могут быть представлены в URL, например символы русского языка, заменяются их кодами)
wordwrap() Используется для разбивки текста

Определение длины строки в PHP

Функция strlen используется очень часто, поскольку значение длины строки требуется для многих ее преобразований. Использовать ее очень просто — передайте ей строку, а функция вернет количество символов, например:

$str = "Привет!"; echo strlen($str);

Поиск и замена в строке PHP

Для поиска в строке используется функция strpos(). Ей нужно передать три параметра — строку, в которой нужно произвести поиск, искомую строку и позицию начальной строки, с которой нужно начинать поиск. Если поиск нужно начать с начала строки, то позицию можно не указывать. Функция возвращает позицию, с которой начинается вхождение искомой строки в начальную строку. Если искомая строка не найдена, функция возвращает false.

Вот пример использования функции strops():

$position = strpos("Привет, мир", "мир"); if ($position === false) echo "Искомая подстрока не найдена"; else echo "Искомая строка начинается с позиции $position";

Что касается замены текста, то для ее осуществления используется функция str_replace(). Функция такого вида str_replace(строка1, строка2, строка3) – заменяет в строка3 все вхождения строка1 на строка2.

Echo str_replace("привет", "пока", "При встрече я говорю привет");

Сравнение строк в PHP

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

  • 0, если лексикографически строки равны;
  • -1, если первая строка лексикографически меньше, чем вторая (например строка «Арбуз» лексикографически меньше, чем строка «Борис»);
  • 1, если первая строка лексикографически больше, чем вторая (например строка «Борис2» лексикографически больше, чем «Борис1»).

Что такое лексикографическое сравнение строк? Представьте, что у вас есть два слова, и вам нужно расположить их по алфавиту в порядке возрастания. Возьмем те же слова «Арбуз» и «Борис». Первое слово начинается на букву «А», которая в алфавите следует раньше буквы «Б», на которую начинается второе слово. Поэтому первая строка будет лексикографически меньше второй строки.

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

Функция substr(строка, число1, число2) возвращает подстроку, начинающуюся с позиции число1 и длиной число2. Попробуйте выполнить код:

Echo substr("Hello, world!", 2, 4);

Первый параметр — это исходная строка. Второй параметр — начало подстроки, а третий параметр (он н еобязательный) — длина подстроки. Если третий параметр не задан, то подстрока возвращается до конца исходной строки.

$sub = substr("машина", 4); //возвращает "на" $sub = substr("машина", 2, 4); //возвращает "шина"

Очень мощной является функция explode(), позволяющая извлечь все подстроки, разделенные разделителем. Предположим, что у нас есть вот такая строка: «Строка1;Строка2;Строка3».

$str = "Строка1;Строка2;Строка3";

При вызове explode() мы должны указать два параметра: разделитель и исходная строка.

$A = explode(";", $str);

Функция возвращает список, содержащий наши строки.

Array ( => Строка1 => Строка2 => Строка3)

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

Функции работы со строками в PHP was last modified: Март 3rd, 2016 by Admin

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

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

Таблица 4.1

Имя функции

Назначение

Выводит значение переменной или выражения

Print _ r

Выводит массив

Echo

Выводит значения списка строковых переменных

Получение символа с указанным кодом

Получение подстроки

Str_repeat

Получение строки из повторяющихся значений

Дополнение строки другой строкой до заданной длины

Chunk_split

Фрагментирование строки (вставляется последовательность разделителей)

Strtok

получение строки по частям

Разделение строки в массив (на части по указанному разделителю)

Или join

Объединение элементов массива в строку с добавлением заданного разделителя

Длина строки

Симметричное шифрование

Сравнение 2 строк c учетом регистра

Strcasecmp

Сравнение строк без учета регистра

Синоним strstr

Поиск первого вхождения символа в строку

Определение первой позиции фрагмента в строке

Определение последней позиции фрагмента в строке

Удаление начальных пробелов

Rtrim или chop

Удаление конечных пробелов

Удаление начальных и конечных пробелов

Реверс строки

Strtoupper

Преобразование в верхний регистр

Strtolower

Преобразование в нижний регистр

Замена указанных символов во всей строке

Str_replace

Замена фрагментов строки

Substr_replace

Замена части строки

Addslashes

Добавление обратных экранирующих слэшей перед спец. символами

Stripslashes

Удаление обратных слэшей

Convert_cyr_string

Конвертация строки из одной кодировки кириллицы в другую

Parse_url

Разделение строки url на ее компоненты

str_pad()

Выравнивает строку до определенной длины заданными символами и возвращает отформатированную строку

strlen (string строка)

Определение длины строки

Strcspn().

Возвращает длину первого сегмента строки1, содержащего символы, отсутствующие в строке2

substr_count()

Возвращает количество вхождений подстроки в заданную строку

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

substr_replace()

Заменяет часть строки, которая начинается с заданной позиции

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

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

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

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

Описание данных функций дано подробно в документации.

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

4.2. Механизмы поиска по шаблону

Данные механизмы решают четыре основные задачи:

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

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

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

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

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

Оператор | (вертикальная черта) проверяет совпадение одной из нескольких альтернатив.

Квадратные скобки () имеют особый смысл в контексте регулярных выражений — они означают «любой символ из перечисленных в скобках».

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

4.3.1. Квантификаторы

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

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

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

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

Конструкция [^a-zA-Z] совпадает с любым символом, не входящим в указанные интервалы (a-z и A-Z).

Служебный символ. (точка) означает «любой символ». Например, выражение р.р совпадает с символом р, за которым следует произвольный символ, после чего опять следует символ р.

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

Рассмотрим несколько примеров:

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

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

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

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

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

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

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

  • еrеg();
  • еrеg_rерlасе();
  • eregi();
  • eregi_replace();
  • split();
  • spliti();
  • sql_regcase().

ereg()

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

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

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

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

ereg_replace()

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

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

$copy_date = "Copyright 2005":

$copy_date = ereg_replace("(+)". "2006", $copy_date);

print $copy_date: // Выводится строка "Copyright 2006"

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

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

eregi_replace()

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

split()

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

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

spliti ()

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

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

sql_regcase()

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

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

Perl давно считается одним из самых лучших языков обработки текстов. Синтаксис Perl позволяет осуществлять поиск и замену даже для самых сложных шаблонов. Разработчики РHР сочли, что не стоит заново изобретать уже изобретенное, а лучше сделать знаменитый синтаксис регулярных выражений Perl доступным для пользователей РНР. Так появились функции для работы с регулярными выражениями в стиле Perl.

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

Рассмотрим общие принципы регулярных выражений Perl на простом примере:

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

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

/<([\w]+)>/

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

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

/ sql \b/ — это последовательность строк, начинающаяся с sql.

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

/ sql \B/ — символы sql должны находиться только не на границе слов.

Шаблон совпадает в таких строках, как PLsql _1 и PLSQL _ Oracle, но не совпадает в строке PLSQL.

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

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

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

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

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

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

preg_match()

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

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

preg_match_all()

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

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

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

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

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

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

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

preg_split()

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

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

preg _ grep ()

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

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

Презентации

Название презентации Аннотация

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

Начнём с функции, которую я использую при работе со строками в PHP регулярно - strlen() . Данная функция возвращает длину строки (количество символов в строке):

$str = "This is my string";
echo strlen($str);
?>

Думаю, что данная функция в комментариях не нуждается.

Также имеются две часто используемые строковые функции - это strtolower() и strtoupper() . Эти функции позволяют перевести строку в нижний и верхний регистр соответственно:

$str = "This is my string";
echo strtolower($str)."
";
echo strtoupper($str);
?>

Очень полезная строковая функция - substr() , которая возвращает подстроку из исходной строки:

$str = "This is my string";
echo substr($str, 1)."
";
echo substr($str, 4, 2)."
";
?>

Как видите, данная функция может содержать два, либо три параметра. Первый параметр - это исходная строка, второй параметр - это номер символа в исходной строке, который потом станет первым в полученной строке. Обратите внимание: нумерация символов начинается с 0 (то есть в нашем примере, 1-ый символ - "h "). Третий параметр означает длину строки, которую мы хотим получить. Если этот параметр не задан, то возвращается строка, начиная со второго параметра и до конца строки. В общем, смотрите на результат, и Вам всё станет ясно.

Ещё одна полезная строковая функция в PHP - это str_replace() . Как следует из названия, данная функция возвращает строку с заменой какой-то части:

$str = "This is my string";
echo str_replace("my", "your", $str);
?>

На выходе у нас получилась следующая строка: "This is your string ". То есть данная функция заменила строку, заданную первым параметром, на строку, заданную вторым параметром, в строке, заданной третьим параметром, и вернула результат.

И последняя функция, которую мы с Вами рассмотрим, - это strpos() . Данная функция ищет вхождение подстроки в строку и возвращает номер первого символа вхождения (напоминаю, что нумерация символов начинается с 0, а не с 1 ):

$str = "This is my string";
echo strpos($str, "is");
?>

Как видите, данная функция очень простая и очень важная, так как позволяет осуществлять поиск в строке. Также у функции strpos() есть ещё один необязательный параметр, задающий смещение. Напоминаю, что данная функция ищет первое вхождение. Например, в нашем примере "is " встречается в строке дважды, но вернула эта функция номер символа при первом вхождении. Поэтому для того, чтобы получить номера и других вхождений необходимо задавать третий параметр - смещение:

$str = "This is my string";
echo strpos($str, "is", 4);
?>

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

$str = "This is my string";
if (strpos($str, "Th") == false) echo "Строка не найдена";
else echo "Строка найдена";
?>

Очевидно, что "Th " содержится в исходной строке, и номер символа первого вхождения - это 0 . Но если Вы запустите этот скрипт, то увидите, что "строка не найдена ". Почему? Если Вы читали статью об операторе эквивалентности , то без проблем ответите на этот вопрос. Однако, если нет, то поясняю. Дело в том, что так как у нас функция strpos() вернула 0 , а 0 с точки зрения PHP - это false , то он без проблем сделал вывод о том, что условие истинно (ведь слева false и справа false ). Как быть? Ответ прост: воспользоваться оператором эквивалентности (обозначается === ), который сравнивает не только значения (которые в нашем примере равны для PHP ), но и их типы:

$str = "This is my string";
if (strpos($str, "Th") === false) echo "Строка не найдена";
else echo "Строка найдена";
?>

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

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

Безусловно, изображения, звуковые файлы, видеоинформация, анимационные данные и аплеты составляют важную часть информационного наполнения World Wide Web, но подавляющая часть данных в веб все еще представлена в виде текста - последовательностей символов, подобных данному предложению. Основным типом данных PHP, предназначенным для представления текста, является строка.

Описание строк в PHP

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

Код PHP $my_string = "Простая строка"; $another_string = "Еще одна строка";

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

Например, после обработки следующего кода, входящего в состав веб-страницы:

Код PHP $count = 13; $string_1 = "В строке \"Hello, world!\" $count символов.
"; $string_2 = "В строке \"Hello, world!\" $count символов.
"; echo $string_1; echo $string_2;

можно рассчитывать на получение в окне браузера такого вывода:

Обработка интерпретатором PHP строк с одинарными и двойными кавычками

Подстановка значений с использованием фигурных скобок

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

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

Например, интерпретатор PHP не испытывает затруднений при обработке следующего кода:

Код PHP $sport = "волейбол"; $play = "Я люблю играть в $sport.";

В таких случаях интерпретатор обнаруживает символ $, после чего начинает собирать символы в подстроку для выявления имени переменной и выполняет такую сборку до тех пор, пока не встретится пробел или точку, которые следуют за именем переменной $sport. Пробелы и точки не могут входить в состав имени переменной, поэтому становится ясно, что рассматриваемая переменная имеет имя $sport; после этого интерпретатор PHP успешно находит значение для данной переменной ("волейбол") и подставляет его.

Но иногда не существует возможности обозначить конец имени переменной с помощью пробела или точки. Рассмотрим следующий пример:

Код PHP $sport_1 = "волей"; $sport_2 = "фут"; $sport_3 = "баскет"; // Неправильные конструкции $play_1 = "Я люблю играть в $sport_1бол."; $play_2 = "Я люблю играть в $sport_2бол."; $play_3 = "Я люблю играть в $sport_3бол.";

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

Код PHP // Правильная конструкция $play_1 = "Я люблю играть в {$sport_1}бол."; $play_2 = "Я люблю играть в {$sport_2}бол."; $play_3 = "Я люблю играть в {$sport_3}бол.";

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

По аналогичным причинам интерпретатор PHP, если не используются фигурные скобки, сталкивается с затруднениями при подстановке значений сложных выражений с именами переменных, наподобие обращений к элементам многомерных массивов и к объектным переменным. Общее правило состоит в том, что если за открывающей фигурной скобкой ({) непосредственно следует символ $, то интерпретатор PHP вычисляет значение выражения с именем переменной вплоть до закрывающей фигурной скобки (}), а затем подставляет результирующее значение в строку. (Если требуется, чтобы в строке появилось литеральное значение {$, это можно обеспечить, поставив перед каждым из этих символов обратную косую черту, \).

Символы и индексы символов в строках

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

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

Код PHP $my_string = "Doubled"; for ($index = 0; $index < strlen($my_string); $index++) { $char = $my_string{$index}; print("$char$char"); }

приводит к получению в окне браузера такого вывода:


Обработка символов в строке

Очевидно, что при каждом проходе по циклу каждый символ строки выводится дважды. Функция strlen() возвращает длину строки.

Операции со строками

В языке PHP предусмотрены две строковые операции: операция со знаком операции точка (.), или операция конкатенации, и операция со знаком операции точка и знак равенства (.=), или операция конкатенации и присваивания. Рассмотрим следующий пример:

Код PHP $string_1 = "Это часть"; $string_2 = "строки"; // Конкатенация строк echo $string_1." простой ".$string_2."
"; // "Это часть простой строки" // Конкатенация и присваивание $string_1 .= " простой "; // Эквивалентно $string_1 = $string_1." простой "; $string_1 .= $string_2; echo $string_1; // "Это часть простой строки"

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

Синтаксическая структура вложенного документа (Heredoc)

Кроме синтаксических структур строк в одинарных и двойных кавычках, в языке PHP предусмотрен еще один способ задания строки, называемый синтаксической структурой вложенного документа (Heredoc) . Как оказалось, подобная синтаксическая структура является весьма удобным средством задания больших фрагментов текста, подставляемого с помощью переменных, поскольку избавляет пользователя от необходимости обозначать внутренние кавычки с помощью специальных символов. Такой способ особенно удобен при создании страниц, которые содержат формы HTML.

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

Рассмотрим следующий пример:

Код PHP $string = <<

EOT; echo $string;

Обратите внимание на то, что показанное выше заключительное слово EOT вообще не должно обозначаться отступом , в противном случае оно будет рассматриваться как принадлежащее к дополнительно включаемому тексту. В качестве метки не обязательно использовать слово "EOT", метка может иметь любое имя, соответствующее обычным правилам именования переменных в языке PHP.

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

Использование heredoc-синтаксиса для вывода формы

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

В языке PHP предусмотрено большое количество разнообразных функций для обработки и преобразования строк. Если у вас когда-либо возникнет необходимость создать собственную функцию, которая читает и обрабатывает строки символ за символом, чтобы сформировать новую строку, вначале подумайте, не могла ли аналогичная задача возникнуть перед кем-либо раньше. А если интуиция подсказывает, что такая вероятность существует, то, возможно, имеется и встроенная функция, которая решает поставленную задачу. Для получения дополнительной информации о строковых функциях обратитесь по адресу php.net/manual/ru/ref.strings.php .

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

Проверка строк

На какие вопросы, касающиеся строк, чаще всего приходится искать ответ? Первым в списке вопросов является вопрос о том, какую длину имеет строка; для ответа на него используется функция strlen() , имя которой является сокращением от string length - длина строки. Пример применения такой функции приведен ниже:

Код PHP $en_str = "Hello world!"; $rus_str = "Простая строка"; echo $en_str." - ".strlen($en_str)." символов
"; echo $rus_str." - ".strlen($rus_str)." символов";

Выполнение этого кода приводит к получению следующего неоднозначного вывода:


Функция strlen()

Как видите, для строки "Hello world!" результат получился правильным, но для строки "Простая строка" результат в 27 символов является неверным. В чем же тут дело? Дело в том, что функция strlen() считает именно байты, а не символы. В первом случае все символы в строке являются англоязычными, т.е. представлены кодировкой ASCII и кодируются 1 байтом. Во втором случае в строке есть русские символы, которые кодируются 2 байтами (UTF-8). Чтобы избежать проблем в дальнейшем при работе со строковыми функциями, в PHP следует использовать функции для многобайтных кодировок, начинающихся с префикса mb_. Это значит, что в предыдущем примере надо заменить функцию strlen() на mb_strlen() и явно указать кодировку:

Код PHP ... echo $rus_str." - ".mb_strlen($rus_str, "UTF8")." символов";

Поиск символов и подстрок

Следующий вопрос, касающийся строк, заключается в том, что они содержат. Например, функция strpos() [mb_strpos() ] позволяет найти номер позиции конкретного символа в строке, если таковой имеется:

Код PHP $en_str = "Hello world!"; echo "Символ "l": ".strpos($en_str, "l"); // 2

Ситуации, связанные с применением функции strpos(), относятся к тем случаям, в которых невосприимчивость языка PHP к типам может стать источником проблем. Если соответствие не найдено, то функция возвращает ложное значение, а если искомый символ совпадает с самым первым символом в строке, то функция возвращает 0 (поскольку отсчет позиций символов в строке начинается с 0, а не с 1). Оба эти значения соответствуют ложному значению при использовании для проверки логического условия. Один из способов, позволяющих различить эти значения, состоит в применении операции сравнения на идентичность (операции ===, введенной начиная с версии PHP4), которая возвращает истинное значение, только если ее операнды являются одинаковыми и относятся к одному и тому же типу. Операцию сравнения на идентичность можно использовать для проверки того, равно ли возвращаемое значение 0 (или имеет значение false), без риска спутать возвращаемое значение с другими значениями, которые могут стать одинаковыми с ним после приведения типа.

Функция strpos() может также использоваться для поиска подстроки, а не одного символа. Для этого достаточно задать в качестве искомой многосимвольную, а не односимвольную строку. Кроме того, в вызове этой функции можно задать дополнительный целочисленный параметр, который указывает позицию начала поиска.

Возможен также поиск в обратном направлении, от конца строки к началу. Для этого используется функция strrpos() [mb_strrpos ]. (Обратите внимание на то, что в имени этой функции есть дополнительная буква r, которая является сокращением от слова reverse - обратный.) Эта функция принимает в качестве параметров строку, в которой должен выполняться поиск, и искомую односимвольную строку, после чего возвращает последнюю позицию вхождения второго параметра в первый параметр. (В отличие от функции strpos() в функции strrpos() искомая строка должна состоять только из одного символа.) После применения этой функции с теми же параметрами, что и в предыдущем примере, будет найдена другая позиция:

Код PHP $en_str = "Hello world!"; echo "Символ "l": ".strrpos($en_str, "l"); // 9 т.к. поиск ведется с конца строки

Сравнение

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

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

Результатам сравнения двух строк с использованием операции == (или соответствующих операций < и >) можно доверять, только если оба операнда являются строками и известно, что не производилось какое-либо преобразование типов. А результатам проверки с помощью функции strcmp(), которая описана ниже, можно доверять всегда.

Наиболее важной функцией сравнения строк, с помощью которой выполняется основной объем работы, является strcmp() . Эта функция принимает две строки в качестве параметров и сравнивает байт за байтом, пока не обнаружит различие. После этого функция возвращает отрицательное число, если первая строка меньше второй, и положительное число, если вторая строка меньше первой. Если строки идентичны, функция strcmp() возвращает ноль.

Функция strcasecmp() действует по такому же принципу, за исключением того, что при сравнении на равенство не учитывается регистр букв. Например, вызов функции strcasecmp("hey!", "HEY!") должен возвратить нуль.

Поиск

Только что описанные функции сравнения позволяют узнать, равна ли одна строка другой строке. А для определения того, содержится ли одна строка в другой, используется функция strpos(), описанная выше, или функция strstr() и подобные ей функции.

Функция strstr() [mb_strstr() ] принимает в качестве параметров строку, в которой должен быть выполнен поиск, и искомую строку (в указанном порядке). В случае успеха данная функция возвращает часть строки, которая начинается с первого вхождения искомой строки (и включает искомую строку). Если такая строка не найдена, функция возвращает ложное значение. В следующем фрагменте кода приведены примеры применения этой функции:

Код PHP $str = "Привет мир!"; $find_str = "мир"; echo "Подстрока "$find_str" в исходной строке: ".strstr($str, $find_str);

Так же как и функция strcmp(), функция strstr() имеет версию, нечувствительную к регистру, которая имеет имя stristr() [mb_stristr ] (буква i в этом имени является сокращением от слова insensitive - нечувствительный). Функция stristr() идентична функции strstr() во всех отношениях, за исключением того, что при сравнении строчные буквы рассматриваются как прописные аналоги.

Выборка подстроки

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

Наиболее простой способ выборки части строки состоит в применении функции substr() [mb_substr() ], которая возвращает новую строку, содержащую часть подпоследовательности символов из старой строки. В качестве параметров функция substr() принимает строку (из которой осуществляется выборка подстроки), целое число (позиция, с которой начинается требуемая подстрока) и необязательный целочисленный третий параметр, который задает длину требуемой подстроки. Если третий параметр не задан, то подразумевается, что подстрока продолжается до конца строки. (Следует помнить, что и при использовании этой функции нумерация позиций в строке начинается с нуля, а не с единицы, как и во всех параметрах функций PHP, которые обозначают числовые позиции в строках.) Например:

Код PHP $str = "Привет мир!"; echo mb_substr($str, 7, 3, "UTF8"); // "мир"

И параметр с обозначением начальной позиции, и параметр с обозначением длины могут быть отрицательными, но в обоих этих случаях отрицательное значение имеет разный смысл. Если отрицательной является начальная позиция, то позиция начального символа подстроки определяется путем обратного отсчета от конца строки, а не прямого отсчета от начала строки. (Начальная позиция, равная -1, указывает, что отсчет начинается с последнего символа, значение -2 указывает на предпоследний символ и т.д.)

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

Ниже приведены некоторые примеры с положительными и отрицательными параметрами:

Код PHP $str = "Привет мир!"; echo mb_substr($str, 7, 3, "UTF8")."
"; // "мир" echo mb_substr($str, -4, 3, "UTF8")."
"; // "мир" echo mb_substr($str, 0, -5, "UTF8")."
"; // "Привет"

Удаление пробелов и символов табуляции из строк

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

Кроме пробелов, эти функции удаляют другие пробельные символы, подобные тем, которые обозначаются с помощью управляющих последовательностей, \n, \r, \t и \0 (символов обозначения конца строки, знаков табуляции и нуль-символов, используемых для обозначения конца строки в программах на языке C).

В языке PHP обычно принято применять функцию удаления пробельных символов в конце строки с именем chop(), но может быть также вызвана идентичная функция, имеющая более выразительное имя rtrim() . Наконец, следует отметить, что функция chop(), несмотря на то, что ее имя, которое означает "отрубить", звучит очень грозно, не повреждает исходный параметр $original, который сохраняет предыдущее значение.

Замена строк

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

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

Код PHP $str = "Привет мир!"; echo str_replace("мир", "планета", $str); // "Привет планета!"

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

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

Код PHP echo substr_replace("ABCDEFG", "-", 2, 3); // "AB-FG"

Часть CDE строки заменена одним знаком. Обратите внимание на то, что в данном случае было разрешено заменить подстроку строкой другой длины. Если параметр с обозначением длины опущен, то предполагается, что должна быть заменена вся часть строки после начальной позиции.

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

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

Код PHP echo str_repeat("ABC", 3); // ABCABCABC

Функции преобразования регистра букв

Эти функции позволяют преобразовывать строчные буквы в прописные и наоборот. Функция strtolower() [mb_strtolower() ] возвращает строку, в которой все буквы преобразованы в строчные. При этом не имеет значения, содержала ли исходная строка исключительно прописные буквы или прописные и строчные. Например:

Код PHP $str = "Привет мир!"; echo mb_strtolower($str, "UTF8"); // "привет мир!"

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

Функция strtoupper() [mb_strtoupper() ] возвращает строку, в которой все буквы преобразованы в прописные. В качестве примера можно привести следующий фрагмент кода:

Код PHP $str = "Привет мир!"; echo mb_strtoupper($str, "UTF8"); // "ПРИВЕТ МИР!"

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

Функции введения управляющих символов

Одним из преимуществ языка PHP является то, что он может применяться дня обмена данными почти с любой системой. Средства подобного рода принято рассматривать как своего рода "программный клей". В этой роли язык PHP применяется для взаимодействия с серверами баз данных, серверами LDAP, для обмена данными через сокеты и само соединение HTTP. Зачастую такое взаимодействие осуществляется путем предварительного создания строки сообщения (наподобие запроса к базе данных), а затем передачи этого сообщения в программу-получатель. Но в программах часто придается особый смысл некоторым символам, и поэтому их приходится преобразовывать в управляющие символы. Это означает, что программе-получателю дается указание рассматривать подобные символы как литеральную часть строки, а не применять к ним специальную обработку.

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

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

Код PHP - абстрактный пример $escapedstring = addslashes("Строка с "кавычками"."); $query = "INSERT INTO test (quote) values ("$escapedstring")"; $result = mysqli_query($link, $query) or die(mysql_error());

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

Функция quotemeta() преобразует в управляющие последовательности более широкий набор символов. Все эти символы обычно имеют особый смысл в командной строке Unix: " . ", " " ", " + ", " * ", " ? ", " [ ", " ] ", " ^ ", " (", " $ " и ")". Например, выполнение следующего кода:

Код PHP $str = "Эти символы ($, *, ^) нужно преобразовать."; echo quotemeta($str);

выводит такую строку:


Использование функции quotemeta()

Функции вывода на внешнее устройство и в строку

Основными конструкциями, применяемыми для вывода, являются print и echo, которые подробно рассматривались ранее. Стандартный способ вывода значений переменных на внешнее устройство состоит в том, чтобы включить имена этих переменных в строку с двойными кавычками (при обработке которой интерпретатором происходит подстановка значений переменных), а затем передать эту строку в конструкцию print или echo.

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

Несколько слов для опытных программистов, работающих на языке C. Эта версия функции sprintf() немного отличается от версии из языка C в том, что функции sprintf() не требуется предоставлять распределенную строку, в которую должна осуществляться запись, поскольку интерпретатор PHP распределяет память для результирующей строки от имени пользователя.

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

После знака % находятся пять элементов, входящих в состав спецификации преобразования, которые описаны ниже, причем некоторые из них являются необязательными: заполнение, выравнивание, минимальная ширина, точность и тип:

    Для указания на то, является ли число отрицательным, применяется необязательное обозначение в виде знака "минус" (-).

    Единственный (необязательный) символ заполнения представляет собой либо 0, либо пробел (). Этот символ используется для заполнения любого пространства, которое при его отсутствии осталось бы незаполненным, но на выделении которого настаивал пользователь (задавая слишком большое значение параметра минимальной ширины). Если этот символ заполнения не задан, то по умолчанию происходит заполнение пробелами.

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

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

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

    Единственный символ, указывающий, как должен интерпретироваться тип значения. Символ f указывает, что значение должно быть выведено как число с плавающей точкой двойной точности, символ s указывает, что вывод значения должен осуществляться в виде строкового, а остальные возможные символы (b, c, d, o, x, X) говорят о том, что значение должно интерпретироваться как целочисленное и выводиться в различных форматах. Этими форматами являются b, который обозначает вывод в формате двоичных чисел, c - обусловливающий вывод символа с соответствующим значением кода ASCII, o - который требует вывода в формате восьмеричных чисел, x - для вывода в формате шестнадцатеричных чисел (с буквенными обозначениями цифр в нижнем регистре), и X - для вывода шестнадцатеричных чисел, в которых в качестве буквенных обозначений цифр используются прописные буквы.

Ниже приведен пример вывода одного и того же числа с плавающей точкой двойной точности несколькими разными способами:

Код PHP
 %10f
%-10f
%2.2f", $value, $value, $value, $value); ?>

Он приводит к получению таких результатов:


Использование форматированных строк с помощью функции printf()

Применяемая в этом примере конструкция

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

Функции для работы с кодом HTML

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

Строковые функции, предназначенные для работы с кодом HTML
Функция Описание
htmlspecialchars()

Принимает в качестве параметра строку и возвращает строку, в которой четыре символа, имеющие специальное значение в языке HTML, заменены специальными строками. Каждый из этих символов заменяется соответствующим компонентом HTML, который после развертывания текста страницы в браузере снова заменяется первоначальным символом. Символ & заменяется компонентом & символ " (символ двойной кавычки) - компонентом " символ < - < а символ > - >

htmlentities()

Осуществляет более полную обработку по сравнению с htmlspecialchars(), т.е. заменяет компонентом HTML не только специальные символы, но и все символы, для которых предусмотрена замена компонентом HTML

get_html_translation_table()

Принимает одну из двух специальных констант (HTML_SPECIAL_CHARS или HTML_ENTITIES) и возвращает таблицу преобразования, используемую соответственно функциями htmlspecialchars() или htmlentities(). Таблица преобразования представляет собой массив, ключами которого являются символьные строки, а соответствующими значениями - строки, предназначенные для их замены

nl2br()

Принимает в качестве параметра строку и возвращает ту же строку, но с дескрипторами
, вставленным перед всеми символами обозначения конца строки (\n, \r или \r\n). Необходимость в использовании этой функции возникает, например, если требуется обеспечить такое же разбиение на абзацы текста, отображаемого в браузере, как и в исходное тексте

strip_tags()

Принимает в качестве параметра строку и выполняет все от нее зависящее для формирования строки, очищенной от всех дескрипторов HTML и всех дескрипторов PHP

Хэширование данных с помощью алгоритма MD5

Алгоритм MD5 представляет собой алгоритм обработки строк, который используется для выработки так называемого дайджеста, или цифровой подписи для любой строки, переданной в качестве параметра. Алгоритм формирует на основе входной строки строку постоянной длины, состоящую из 32 шестнадцатеричных цифр (0-9, a-f). Результаты, формируемые с помощью алгоритма MD5, обладают очень полезными свойствами, описанными ниже:

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

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

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

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

Код PHP $str = "Hello world!"; echo "Хэш-код для строки "$str": ".md5($str)."
"; $str = "Hello, world!"; echo "Хэш-код для строки "$str": ".md5($str)."
"; $str = "Hello world"; echo "Хэш-код для строки "$str": ".md5($str)."
";

приводит к получению в окне браузера таких результатов:

Хеширование строк с помощью функции md5()

Безусловно, в данном случае все входные строки весьма напоминают друг друга, но выходные строки не имеют какого-либо видимого сходства. Кроме того, диапазон возможных выходных значений является чрезвычайно огромным (16 32), поэтому вероятность совпадения результатов обработки двух различных строк (при котором вырабатывалось бы одно и то же значение MD5) крайне мала.

Благодаря указанным выше характерным особенностям алгоритма MD5 значения, полученные с его помощью, могут применяться для решения самых различных задач, включая описанные ниже:

Вычисление контрольной суммы сообщения или файла

Для проверки того, не произошло ли искажение сообщения во время передачи, можно передать вместе с сообщением дайджест MD5, а после получения сообщения снова сформировать дайджест MD5. Если две версии дайджеста не совпадают, значит, во время передачи были допущены искажения.

Контроль над тем, остается ли содержимое файла неизменным

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

Разбиение множества строк или файлов на подмножества

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

Кроме функции md5(), в языке PHP предусмотрена функция md5_file() , которая принимает в качестве параметра имя файла и возвращает хэшированное значение MD5, соответствующие содержимому файла.

Функции, предназначенные для оценки подобия строк

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

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

Код PHP echo levenshtein("Tim", "Time"); // 1 echo levenshtein("boy", "chefboyardee"); // 9 echo levenshtein("never", "clever"); // 2

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

Функции синтаксического анализа и разбиения на лексемы

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

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

Код PHP $token = strtok("open-source HTML-embedded server-side Web scripting", " "); while($token) { echo $token."
"; $token = strtok(" "); }

который приводит к получению в окне браузера такого вывода:


Использование функции strtok()

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

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

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

Код PHP $explode_result = explode("AND", "one AND a two AND a three");

который приводит к получению массива $explode_result , содержащего три элемента, каждый из которых представляет собой строку: "one ", " a two " и " a three". В данном конкретном примере не встречается ни одной прописной буквы в какой-либо из строк, содержащихся в массиве, поскольку разделитель AND не присутствует в результате.

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

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

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

Функции Регулярные выражения 1 2 3 4 5 6 7 8 9 10

Функции для работы со строками

Для работы со строками в PHP существует множество полезных функций.

Кратко разберем часть функций для работы со строками.

Базовые строковые функции

strlen(string $st)

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

$x = "Hello!";
echo strlen($x); // Выводит 6

strpos(string $where, string $what, int $fromwhere=0)

Пытается найти в строке $where подстроку (то есть последовательность символов) $what и в случае успеха возвращает позицию (индекс) этой подстроки в строке. Необязательный параметр $fromwhere можно задавать, если поиск нужно вести не с начала строки $from , а с какой-то другой позиции. В этом случае следует эту позицию передать в $fromwhere . Если подстроку найти не удалось, функция возвращает false . Однако будьте внимательны, проверяя результат вызова strpos() на false - используйте для этого только оператор === . Пример:

echo strpos("Hello","el"); // Выводит 1

И еще пример:

if (strpos("Norway","rwa") !== false) echo "Строка rwa есть в Norway";
// При сравнении используйте операторы тождественных сравнений (===) (!==) чтобы избежать проблем с определением типов

substr(string $str, int $start [,int $length])

Данная функция тоже востребуется очень часто. Ее назначение - возвращать участок строки $str , начиная с позиции $start и длиной $length . Если $length не задана, то подразумевается подстрока от $start до конца строки $str . Если $start больше, чем длина строки, или же значение $length равно нулю, то возвращается пустая подстрока. Однако эта функция может делать и еще довольно полезные вещи. К примеру, если мы передадим в $start отрицательное число, то будет считаться, что это число является индексом подстроки, но только отсчитываемым от конца $str (например, -1 означает "начиная с последнего символа строки"). Параметр $length , если он задан, тоже может быть отрицательным. В этом случае последним символом возвращенной подстроки будет символ из $str с индексом $length , определяемым от конца строки. Примеры:

$str = "Programmer";
echo substr($str,0,2); // Выводит Pr
echo substr($str,-3,3); // Выводит mer

strcmp(string $str1, string $str2)

Сравнивает две строки посимвольно (точнее, побайтово) и возвращает: 0 , если строки полностью совпадают; -1 , если строка $str1 лексикографически меньше $str2 ; и 1 , если, наоборот, $str1 "больше" $str2 . Так как сравнение идет побайтово, то регистр символов влияет на результаты сравнений.

strcasecmp(string $str1, string $str2)

То же самое, что и strcmp(), только при работе не учитывается регистр букв. Например, с точки зрения этой функции "ab" и "AB" равны.

Функции для работы с блоками текста

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

str_replace(string $from, string $to, string $str)

Заменяет в строке $str все вхождения подстроки $from (с учетом регистра) на $to и возвращает результат. Исходная строка, переданная третьим параметром, при этом не меняется. Эта функция работает значительно быстрее, чем ereg_replace() , которая используется при работе с регулярными выражениями PHP, и ее часто используют, если нет необходимости в каких-то экзотических правилах поиска подстроки. Например, вот так мы можем заместить все символы перевода строки на их HTML эквивалент - тэг
:

$st=str_replace("\n","
\n",$str)

Как видим, то, что в строке
\n тоже есть символ перевода строки, никак не влияет на работу функции, т. е. функция производит лишь однократный проход по строке. Для решения описанной задачи также применима функция nl2br() , которая работает чуть быстрее.

string nl2br(string $string)

Заменяет в строке все символы новой строки \n на
\n и возвращает результат. Исходная строка не изменяется. Обратите внимание на то, что символы \r, которые присутствуют в конце строки текстовых файлов Windows, этой функцией никак не учитываются, а потому остаются на старом месте.

WordWrap(string $str, int $width=75, string $break="\n")

Эта функция, появившаяся в PHP4 , оказывается невероятно полезной, например, при форматировании текста письма перед автоматической отправкой его адресату при помощи mail() . Она разбивает блок текста $str на несколько строк, завершаемых символами $break , так, чтобы на одной строке было не более $width букв. Разбиение происходит по границе слова, так что текст остается читаемым. Возвращается получившаяся строка с символами перевода строки, заданными в $break . Пример использования:

$ str = "Это текст электронного письма, которое нужно будет отправить адресату..." ;
// Разбиваем текст по 20 символов
$ str = WordWrap ($ str , 20 , "
" );
echo $ str ;
// Выводит:
/* Это текст
электронного письма,
которое нужно будет
отправить
адресату... */
?>

strip_tags (string $str [, string $allowable_tags])

Еще одна полезная функция для работы со строками. Эта функция удаляет из строки все тэги и возвращает результат. В параметре $allowable_tags можно передать тэги, которые не следует удалять из строки. Они должны перечисляться вплотную друг к другу. Примеры:

$stripped = strip_tags ($str); // Удаляет все html - теги из строки (текста)
$stripped = strip_tags($str, ""); // Удалит все html - теги, кроме html - тегов <head> и <title></p> <h3>Функции для работы с отдельными символами</h3> <p>Как и в других языках программирования, в PHP можно работать с символами строк отдельно.</p> <p>Обратиться к любому символу строки можно по его индексу:</p> <p>$str = "PHP";<br> echo $str; // Выводит "P"</p> <p><b>chr(int $code) </b></p> <p>Данная функция возвращает строку, состоящую из символа с кодом $code . Пример:</p> <p>echo chr(75); //Выводит K</p> <p><b>ord($char) </b></p> <p>Данная функция возвращает код символа $char . Вот пример:</p> <p>echo ord("A"); // Выводит 65 - код буквы "A"</p> <h3>Функции удаления пробелов</h3> <p>Иногда трудно даже представить, какими могут быть странными пользователи, если дать им в руки клавиатуру и попросить напечатать на ней какое-нибудь слово. Так как клавиша пробела - самая большая, то пользователи имеют обыкновение нажимать ее в самые невероятные моменты. Этому способствует также и тот факт, что символ с кодом 32, обозначающий пробел, как вы знаете, на экране не виден. Если программа не способна обработать описанную ситуацию, то она, в лучшем случае после тягостного молчания отобразит в браузере что-нибудь типа "неверные входные данные", а в худшем - сделает при этом что-нибудь необратимое.</p><p><b>trim(string $str) </b></p> <p>Возвращает копию $str, только с удаленными ведущими и концевыми пробельными символами. Под пробельными символами я здесь и далее подразумеваю: пробел " ", символ перевода строки \n, символ возврата каретки \r и символ табуляции \t. Например, вызов trim(" test\n ") вернет строку "test". Эта функция используется очень широко. Старайтесь применять ее везде, где есть хоть малейшее подозрение на наличие ошибочных пробелов. Поскольку работает она очень быстро.</p> <p><b>ltrim(string $st) </b></p> <p>То же, что и trim() , только удаляет исключительно ведущие пробелы, а концевые не трогает. Используется гораздо реже.</p> <p><b>chop(string $st) </b></p> <p>Удаляет только концевые пробелы, ведущие не трогает.</p> <h3>Функции преобразования символов</h3> <p>Web-программирование - одна из тех областей, в которых постоянно приходится манипулировать строками: разрывать их, добавлять и удалять пробелы, перекодировать в разные кодировки, наконец, URL- кодировать и декодировать. В PHP реализовать все эти действия вручную, используя только уже описанные примитивы, просто невозможно из соображений быстродействия. Поэтому-то и существуют подобные встроенные функции.</p> <p><b>strtr(string $str, string $from, string $to) </b></p> <p>Эта функция применяется не столь широко, но все-таки иногда она бывает довольно полезной. Она заменяет в строке $str все символы, встречающиеся в $from , на их "парные" (то есть расположенные в тех же позициях, что и во $from) из $to .</p> <p>Следующие несколько функций предназначены для быстрого URL-кодирования и декодирования.</p> <p>URL-кодирование необходимо для передачи данных через интернет. Например, такое кодирование целесообразно, если вы передаете русскоязычную информацию в качестве параметра скрипта. Также подобное кодирование можно выполнить и для файла, чтобы не возникало коллизий из-за отсутствия поддержки 8-битных кодировок некоторыми серверами. Вот эти функции:</p> <p><b>UrlEncode(string $str) </b></p> <p>Функция URL-кодирует строку $str и возвращает результат. Эту функцию удобно применять, если вы, например, хотите динамически сформировать ссылку <a href=...> на какой-то сценарий, но не уверены, что его параметры содержат только алфавитно-цифровые символы. В этом случае воспользуйтесь функцией так:</p> <p>echo "<a href=/script.php?param=".UrlEncode($UserData);</p> <p>Теперь, даже если переменная $UserData включает символы = , & или даже, все равно сценарию будут переданы корректные данные.</p> <p><b>UrlDecode(string $st) </b></p> <p>Производит URL-декодирование строки. В принципе, используется значительно реже, чем UrlEncode() , потому что PHP и так умеет перекодировать входные данные автоматически.</p> <p><b>RawUrlEncode(string $st) </b></p> <p>Почти полностью аналогична UrlEncode() , но только пробелы не преобразуются в <b>+ </b>, как это делается при передаче данных из формы, а воспринимаются как обычные неалфавитно-цифровые символы. Впрочем, этот метод не порождает никаких дополнительных несовместимостей в коде.</p> <p><b>RawUrlDecode(string $st) </b></p> <p>Аналогична UrlDecode() , но не воспринимает <b>+ </b> как пробел.</p> <p><b>HtmlSpecialChars(string $str) </b></p> <p>Это функция, которая обычно используется в комбинации с echo . Основное ее назначение - гарантировать, что в выводимой строке ни один участок не будет воспринят как тэг.</p> <p>Заменяет в строке некоторые символы (такие как амперсант, кавычки и знаки "больше" и "меньше") на их HTML-эквиваленты, так, чтобы они выглядели на странице "самими собой". Самое типичное применение этой функции - формирование параметра value в различных элементах формы, чтобы не было никаких проблем с кавычками, или же вывод сообщения в гостевой книге, если вставлять тэги пользователю запрещено.</p> <p><b>StripSlashes(string $str) </b></p> <p>Заменяет в строке $str некоторые предваренные слэшем символы на их однокодовые эквиваленты. Это относится к следующим символам: <b>" </b>, <b>" </b>, <b>\ </b> и никаким другим.</p> <p><b>AddSlashes(string $str) </b></p> <p>Вставляет слэши только перед следующими символами: ", " и \. Функцию очень удобно использовать при вызове <b>eval() </b> (эта функция выполняет строку, переданную ей в параметрах, так, как будто имеет дело с небольшой PHP-программой.</p> <h3>Функции изменения регистра</h3> <p>Довольно часто нам приходится переводить какие-то строки, скажем, в верхний регистр, т. е. делать все прописные буквы в строке заглавными. В принципе, для этой цели можно было бы воспользоваться функцией strtr() , рассмотренной выше, но она все же будет работать не так быстро, как нам иногда хотелось бы. В PHP есть функции, которые предназначены специально для таких нужд. Вот они:</p> <p><b>strtolower(string $str) </b></p> <p>Преобразует строку в нижний регистр. Возвращает результат перевода.</p> <p>Надо заметить, что при неправильной настройке локали (это набор правил по переводу символов из одного регистра в другой, переводу даты и времени, денежных единиц и т. д.) функция будет выдавать неправильные результаты при работе с буквами кириллицы.<br> Возможно, в несложных программах, а также если нет уверенности в поддержке соответствующей локали операционной системой, проще будет воспользоваться "ручным" преобразованием символов, задействуя функцию strtr() :</p> <p>$st=strtr($st, "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩљЫЬЭЮЯ", "абвгдеёжзийклмнопрстуфхцчшщъыьэюя");</p> <p>Главное достоинство данного способа - то, что в случае проблем с кодировкой для восстановления работоспособности сценария вам придется всего лишь преобразовать его в ту же кодировку, в которой у вас хранятся документы на сервере.</p> <p><b>strtoupper(string $str) </b></p> <p>Переводит строку в верхний регистр. Возвращает результат преобразования. Эта функции также прекрасно работает со строками, составленными из латиницы, но с кирилицей может возникнуть все та же проблема.</p> <h3>Установка локали (локальных настроек)</h3> <p>Локалью будем называть совокупность локальных настроек системы, таких как формат даты и времени, язык, кодировка.</p> <p>Настройки локали сильно зависят от операционной системы.</p> <p>Для установки локали используется функция SetLocale() :</p> <p><b>SetLocale(string $category, string $locale) </b></p> <p>Функция устанавливает текущую локаль, с которой будут работать функции преобразования регистра символов, вывода даты-времени и.т.д. Вообще говоря, для каждой категории функций локаль определяется отдельно и выглядит по-разному. То, какую именно категорию функций затронет вызов SetLocale() , задается в параметре $category . Он может принимать следующие строковые значения:</p> <p>LC_CTYPE - активизирует указанную локаль для функций перевода в верх-<br> ний/нижний регистры;<br> LC_NUMERIC - активизирует локаль для функций форматирования дробных чи-<br> сел - а именно, задает разделитель целой и дробной части в числах;<br> LC_TIME - задает формат вывода даты и времени по умолчанию;<br> LC_ALL - устанавливает все вышеперечисленные режимы.</p> <p>Теперь о параметре $locale . Как известно, каждая локаль, установленная в системе, имеет свое уникальное имя, по которому к ней можно обратиться. Именно оно и фиксируется в этом параметре. Однако, есть два важных исключения из этого правила. Во-первых, если величина $locale равна пустой строке "", то устанавливается та локаль, которая указана в глобальной переменной окружения с именем, совпадающим с именем категории $category (или LANG - она практически всегда присутствует в Unix). Во вторых, если в этом параметре передается 0, то новая локаль не устанавливается, а просто возвращается имя текущей локали для указанного режима.</p> <p>К сожалению, имена локалей задаются при настройке операционной системы, и для них, по-видимому, не существует стандартов. Выясните у своего хостинг-провайдера, как называются локали для разных кодировок русских символов. Но, если следующий фрагмент работает у вашего хостинг-провайдера, это не означает, что он заработает, например, под Windows:</p> <p>setlocale("LC_CTYPE","ru_SU.KOI8-R");</p> <p>Здесь вызов устанавливает таблицу замены регистра букв в соответствии с кодировкой KOI8-R.</p> <p>По правде говоря, локаль - вещь довольно непредсказуемая и довольно плохо переносимая между операционными системами. Так что, если ваш сценарий не очень велик, задумайтесь: возможно, лучше будет искать обходной путь, например, используя strtr() , а не рассчитывать на локаль.</p> <h3>Функции преобразования кодировок</h3> <p>Часто встречается ситуация, когда нам требуется преобразовать строку из одной кодировки кириллицы в другую. Например, мы в программе сменили локаль: была кодировка windows , а стала - KOI8-R . Но строки-то остались по-прежнему в кодировке WIN-1251 , а значит, для правильной работы с ними нам нужно их перекодировать в KOI8-R. Для этого и служит функция преобразования кодировок.</p> <p><b>convert_cyr_string(string $str, char $from, char $to); </b></p> <p>Функция переводит строку $str из кодировки $from в кодировку $to. Конечно, это имеет смысл только для строк, содержащих "русские" буквы, т. к. латиница во всех кодировках выглядит одинаково. Разумеется, кодировка $from должна совпадать с истинной кодировкой строки, иначе результат получится неверным. Значения $from и $to - один символ, определяющий кодировку:</p> <p>k - koi8-r<br> w - windows-1251<br> i - iso8859-5<br> a - x-cp866<br> d - x-cp866<br> m - x-mac-cyrillic</p> <p>Функция работает достаточно быстро, так что ее вполне можно применять, скажем, для перекодировки писем в нужную форму перед их отправкой по электронной почте.</p> <h3>Функции форматных преобразований строк</h3> <p>Как мы знаем, переменные в строках PHP интерполируются, поэтому практически всегда задача "смешивания" текста со значениями переменных не является проблемой. Например, мы можем спокойно написать что-то вроде:</p> <p>echo "Привет, $name! Вам $age лет.";</p> <p>В Си для аналогичных целей используется следующий код:</p> <p>printf("Привет, %s! Вам %s лет",name,age);</p> <p>Язык PHP также поддерживает ряд функций, использующих такой же синтаксис, как и их Си -эквиваленты. Бывают случаи, когда их применение дает наиболее красивое и лаконичное решение, хотя это и случается довольно нечасто.</p> <p><b>sprintf(string $format [, mixed args, ...]) </b></p> <p>Эта функция - аналог функции sprintf() в Си. Она возвращает строку, составленную на основе строки форматирования, содержащей некоторые специальные символы, которые будут впоследствии заменены на значения соответствующих переменных из списка аргументов.<br> Строка форматирования $format может включать в себя команды форматирования, предваренные символом % . Все остальные символы копируются в выходную строку как есть. Каждый спецификатор формата (то есть, символ % и следующие за ним команды) соответствует одному, и только одному параметру, указанному после параметра $format . Если же нужно поместить в текст % как обычный символ, необходимо его удвоить:</p> <p>echo sprintf("The percentage was %d%%",$percentage);</p> <p>Каждый спецификатор формата включает максимум пять элементов (в порядке их следования после символа %):</p> <p>>>> Необязательный спецификатор размера поля, который указывает, сколько символов будет отведено под выводимую величину. В качестве символов-заполнителей (если значение имеет меньший размер, чем размер поля для его вывода) может использоваться пробел или 0, по умолчанию подставляется пробел. Можно задать любой другой символ-наполнитель, если указать его в строке форматирования, предварив апострофом ".</p> <p>>>> Опциональный спецификатор выравнивания, определяющий, будет результат выровнен по правому или по левому краю поля. По умолчанию производится выравнивание по правому краю, однако можно указать и левое выравнивание, задав символ - (минус).</p> <p>>>> Необязательное число, определяющее размер поля для вывода величины. Если результат не будет в поле помещаться, то он "вылезет" за края этого поля, но не будет усечен.</p> <p>>>> Необязательное число, предваренное точкой ".", предписывающее, сколько знаков после запятой будет в результирующей строке. Этот спецификатор учитывается только в том случае, если происходит вывод числа с плавающей точкой, в противном случае он игнорируется.</p> <p>>>> Наконец, обязательный (заметьте - единственный обязательный!) спецификатор типа величины, которая будет помещена в выходную строку:</p> <p><b>b </b> - очередной аргумент из списка выводится как двоичное целое число;<br><b>c </b> - выводится символ с указанным в аргументе кодом;<br><b>d </b> - целое число;<br><b>f </b> - число с плавающей точкой;<br><b>o </b> - восьмеричное целое число;<br><b>s </b> - строка символов;<br><b>x </b> - шестнадцатеричное целое число с маленькими буквами <i>a-z </i>;<br><b>X </b> - шестнадцатеричное число с большими буквами <i>A-Z </i>.</p> <p>Вот как можно указать точность представления чисел с плавающей точкой:</p> <p>$money1 = 68.75;<br> $money2 = 54.35;<br> $money = $money1 + $money2;<br> // echo $money выведет "123.1"...<br> $formatted = sprintf ("%01.2f", $money);<br> // echo $formatted выведет "123.10" !</p> <p>Вот пример вывода целого числа, предваренного нужным количеством нулей:</p> <p>$isodate=sprintf("%04d-%02d-%02d",$year,$month,$day);</p> <p><b>printf(string $format [, mixed args, ...]) </b></p> <p>Делает то же самое, что и sprintf() , только результирующая строка не возвращается, а направляется в браузер пользователя.</p> <p><b>number_format(float $number, int $decimals, string $dec_point=".", string $thousands_sep=","); </b></p> <p>Эта функция форматирует число с плавающей точкой с разделением его на триады с указанной точностью. Она может быть вызвана с двумя или четырьмя аргументами, но не с тремя! Параметр $decimals задает, сколько цифр после запятой должно быть у числа в выходной строке. Параметр $dec_point представляет собой разделитель целой и дробной частей, а параметр $thousands_sep - разделитель триад в числе (если указать на его месте пустую строку, то триады не отделяются друг от друга).</p> <p>В PHP существует еще несколько функций для выполнения форматных преобразований, среди них - <b>sscanf() </b> и <b>fscanf() </b>, которые часто применяются в Си. Однако в PHP их использование весьма ограничено: чаще всего для разбора строк оказывается гораздо выгоднее привлечь регулярные выражения или функцию <b>explode() </b>.</p> <h3>Хэш-функции</h3> <p><b>md5(string $str) </b></p> <p>Возвращает хэш-код строки $str , основанный на алгоритме корпорации RSA Data Security под названием " MD5 Message-Digest Algorithm ". Хэш-код - это просто строка, практически уникальная для каждой из строк $str . То есть вероятность того, что две разные строки, переданные в $str , дадут нам одинаковый хэш-код, стремится к нулю.</p> <p>Если длина строки $str может достигать нескольких тысяч символов, то ее MD5-код занимает максимум 32 символа.</p> <p>Для чего нужен хэш-код и, в частности, алгоритм MD5 ? Например, для проверки паролей на истинность.</p> <p>Пусть, к примеру, у нас есть система со многими пользователями, каждый из которых имеет свой пароль. Можно, конечно, хранить все эти пароли в обычном виде, или зашифровать их каким-нибудь способом, но тогда велика вероятность того, что в один прекрасный день этот файл с паролями у вас украдут.</p> <p>Сделаем так: в файле паролей будем хранить не сами пароли, а их (MD5) хэш-коды. При попытке какого либо пользователя войти в систему мы вычислим хэш-код только что введенного им пароля и сравним его с тем, который записан у нас в базе данных. Если коды совпадут, значит, все в порядке, а если нет - что ж, извините...<br> Конечно, при вычислении хэш-кода какая-то часть информации о строке $str безвозвратно теряется. И именно это позволяет нам не опасаться, что злоумышленник, получивший файл паролей, сможет его когда-нибудь расшифровать. Ведь в нем нет самих паролей, нет даже их каких-то связных частей!</p> <p>Пример использования алгоритма хеширования MD5:</p> <p><? php <br>$ pass_a = "MySecret" ; <br>$ pass_b = "MySecret" ; <br><span>// Выводим хеш-код строки MySecret ($pass_a) - исходный пароль </span><br>echo <span>"<b>Хеш-код исходного пароля "$pass_a":</b><b style=\"color:green\">" </span>. md5 ($ pass_a ). "</b><br>" ; <br><span>// Выводим хеш-код строки MySecret ($pass_b) - верифицируемый пароль </span><br>echo <span>"<b>Хеш-код верифицируемого пароля "$pass_b":</b><b style=\"color:green\">" </span>. md5 ($ pass_b ). "</b><br>" ; <br><span>// Сравниваем хеш-коды MD5 исходного и верифицируемого пароля </span><br>echo <span>"<h3>Проверяем истинность введенного пароля:</h3>" </span>; <br>if (md5 ($ pass_a )=== md5 ($ pass_b )) echo <span>"<h3 style=\"color:green\">Пароль верный! (Хеш-коды совпадают)</h3>" </span>; <br>else echo <span>"<h3 style=\"color:red\">Пароль неверный! (Хеш-коды не совпадают)</h3>" </span><br><span>// В данной ситуации выводит: Пароль верный! (Хеш-коды совпадают) </span><br><span>// Попробуйте изменить значение строки $pass_b:) </span><br>?> </p> <p><b>crc32(string $str) </b></p> <p>Функция crc32() вычисляет 32-битную контрольную сумму строки $str. То есть, результат ее работы - 32 битное (4-байтовое) целое число. Эта функция работает гораздо быстрее md5(), но в то же время выдает гораздо менее надежные "хэш-коды" для строки.</p> <h3>Функции сброса буфера вывода</h3> <p>Эта функция имеет очень и очень отдаленное отношение к работе со строками, но она еще дальше отстоит от других функций.</p> <p>Начнем издалека: обычно при использовании echo данные не прямо сразу отправляются клиенту, а накапливаются в специальном буфере, чтобы потом транспортироваться большой "пачкой". Так получается быстрее.</p> <p>Однако, иногда бывает нужно досрочно отправить все данные из буфера пользователю, например, если вы что-то выводите в реальном времени (так зачастую работают чаты). Вот тут-то вам и поможет функция flush() , которая отправляет содержимое буфера echo в браузер пользователя.</p> <table width="600" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#000066" class="mtx1"><tr><td bgcolor="#CAEEFF"> <b><<< Назад </b> <br>(Строки (Часть 2)) </td> <td bgcolor="#CAEEFF"> <b>Содержание </b> </td> <td bgcolor="#CAEEFF"> <b>Вперед >>> </b> <br>(Строки (Часть 4)) </td> </tr></table><br><table width="470" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#000066" class="mtx1"><tr><td bgcolor="#CAEEFF"> Есть еще вопросы или что-то непонятно - добро пожаловать на наш </td> </tr><tr><td bgcolor="#F7F7F7"> </td> </tr><tr><td bgcolor="#CAEEFF"> <table width="100%"><tr><td width="100%"></td></tr></table></td></tr></table> <script type="text/javascript"> <!-- var _acic={dataProvider:10};(function(){var e=document.createElement("script");e.type="text/javascript";e.async=true;e.src="https://www.acint.net/aci.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})() //--> </script><br> <br> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy>");</script> </div> </div> </article> </div> </div> <div id="secondary"> <aside id="recent-posts-2" class="widget widget_recent_entries clearfix"> <h3 class="widget-title"><span>Популярные записи</span></h3> <ul> <li> <a href="/payza-registration-poshagovaya-registraciya-v-payza-na-russkom-registraciya-v-payza-i-lichnyi/">Пошаговая регистрация в Payza на русском</a> </li> <li> <a href="/besplatnyi-antivirus-skachat-besplatnyi-antivirus-bitdefender-antivirus-free-edition/">Бесплатный антивирус Bitdefender Antivirus Free Edition Установка надёжных паролей</a> </li> <li> <a href="/licenziya-dlya-1s-licenzii-1s-predpriyatiya-preimushchestva-programmnyh-licenzii/">Лицензии «1С:Предприятия</a> </li> <li> <a href="/ustanovka-1s-na-ssd-disk-gil-v---perevod-konfiguracii-na-upravlyaemye/">Гилёв - Перевод конфигурации на управляемые блокировки</a> </li> <li> <a href="/1s-83-buhgalteriya-kontragenty-poisk-ne-rabotaet/">1с 83 бухгалтерия контрагенты поиск не работает</a> </li> <li> <a href="/kak-udalit-realizaciyu-v-1s-8-2-buhuchet-info-kak-pometit-na-udalenie-s/">Как удалить реализацию в 1с 8</a> </li> <li> <a href="/kak-zaiti-v-router-dlya-smeny-parolya-chto-predprinyat-esli-uteryan-parol/">Что предпринять, если утерян пароль администратора Windows</a> </li> <li> <a href="/sdelat-foto-onlain-s-veb-kamery-sdelat-foto-onlain-s-veb-kamery-sfotografirovatsya-na-veb-kameru/">Сделать фото онлайн с веб-камеры Сфотографироваться на веб-камеру на ноутбуке онлайн</a> </li> <li> <a href="/kakoi-programmoi-konvertirovat-v-swf-kak-konvertirovat-faily-swf-v-avi/">Как конвертировать файлы swf в avi</a> </li> <li> <a href="/pravilno-li-zapisan-operator-prisvaivaniya-v-paskale-operatory/">Операторы языка программирования паскаль</a> </li> </ul> </aside> <aside id="recent-posts-2" class="widget widget_recent_entries clearfix"> <h3 class="widget-title"><span>Свежие записи</span></h3> <ul> <li> <a href="/kratkii-obzor-smartfona-lg-q6-samyi-bezramochnyi-iz-byudzhetnikov-test-i/">Тест и обзор LG Q6a: компактный и неоднозначный Lg q6 белый</a> </li> <li> <a href="/reshenie-problem-reshenie-problem-chto-delat-esli-klient-bank-vydal-etot/">Решение проблем что делать, если клиент банк выдал этот код</a> </li> <li> <a href="/kakoi-draiver-ustanovit-na-skaip-poisk-i-ustanovka-draivera-dlya-veb/">Поиск и установка драйвера для веб камеры</a> </li> <li> <a href="/kak-sdelat-banner-v-instagramme-besplatnyi-konstruktor-bannerov-dlya/">Бесплатный конструктор баннеров для соцсетей</a> </li> <li> <a href="/acer-kalibrovka-batarei-kalibrovka-batarei-noutbuka-chto-takoe/">Калибровка батареи ноутбука</a> </li> <li> <a href="/kak-proverit-kakaya-versiya-flesh-pleera-ustanovlena-kak/">Как правильно установить приложение Adobe Flash Player?</a> </li> <li> <a href="/kopirovanie-peremeshchenie-i-udalenie-papok-failov-windows-kopirovanie-peremeshchenie-udalenie-failov/">Windows: копирование, перемещение, удаление файлов и папок</a> </li> <li> <a href="/ponyatie-ob-osnovnyh-strokovyh-funkciyah-php-strokovye-funkcii-v-php-funkcii/">Понятие об основных строковых функциях php</a> </li> <li> <a href="/kak-podklyuchit-rouming-po-rossii-i-za-granicei-ot-mts-kak/">Как подключить роуминг МТС – полезные советы Легкий роуминг с международным доступом</a> </li> <li> <a href="/novaya-usluga-bilain-edinaya-pochta-kak-otklyuchit-uslugu-edinaya-pochta-na/">Как отключить услугу «Единая почта» на Билайн Сервис единая почта отключить</a> </li> </ul> </aside> <aside> </aside> </div> </div> </div> <footer id="colophon" class="clearfix"> <div class="footer-widgets-wrapper"> <div class="inner-wrap"> <div class="footer-widgets-area clearfix"> <div class="tg-footer-main-widget"> <div class="tg-first-footer-widget"> <aside id="text-5" class="widget widget_text clearfix"> <div class="textwidget"> <p>2024 Компьютерный журнал</p> <p></p> </div> </aside> </div> </div> <div class="tg-footer-other-widgets"> <div class="tg-second-footer-widget"> <aside id="text-4" class="widget widget_text clearfix"> <div class="textwidget"> <p class="entry-title"><a href="" target="_blank" rel="noopener">Политика конфиденциальности</a></p> <p class="entry-title"><a href="/feedback/" target="_blank" rel="noopener">Контакты</a></p> </div> </aside> </div> <div class="tg-third-footer-widget"> </div> <div class="tg-fourth-footer-widget"> </div> </div> </div> </div> </div> <div class="footer-socket-wrapper clearfix"> <div class="inner-wrap"> <div class="footer-socket-area"> <div class="footer-socket-right-section"> </div> </div> </div> </div> </footer> <a href="#masthead" id="scroll-up"><i class="fa fa-chevron-up"></i></a> </div> <div id="wpcp-error-message" class="msgmsg-box-wpcp warning-wpcp hideme"><span>error: </span>Content is protected !!</div> <script> var timeout_result; function show_wpcp_message(smessage) { if (smessage !== "") { var smessage_text = '<span>Alert: </span>' + smessage; document.getElementById("wpcp-error-message").innerHTML = smessage_text; document.getElementById("wpcp-error-message").className = "msgmsg-box-wpcp warning-wpcp showme"; clearTimeout(timeout_result); timeout_result = setTimeout(hide_message, 3000); } } function hide_message() { document.getElementById("wpcp-error-message").className = "msgmsg-box-wpcp warning-wpcp hideme"; } </script> <style type="text/css"> #wpcp-error-message { direction: ltr; text-align: center; transition: opacity 900ms ease 0s; z-index: 99999999; } .hideme { opacity: 0; visibility: hidden; } .showme { opacity: 1; visibility: visible; } .msgmsg-box-wpcp { border-radius: 10px; color: #555; font-family: Tahoma; font-size: 11px; margin: 10px; padding: 10px 36px; position: fixed; width: 255px; top: 50%; left: 50%; margin-top: -10px; margin-left: -130px; -webkit-box-shadow: 0px 0px 34px 2px rgba(242, 191, 191, 1); -moz-box-shadow: 0px 0px 34px 2px rgba(242, 191, 191, 1); box-shadow: 0px 0px 34px 2px rgba(242, 191, 191, 1); } .msgmsg-box-wpcp span { font-weight: bold; text-transform: uppercase; } .error-wpcp { background: #ffecec url('/wp-content/plugins/wp-content-copy-protector/images/error.png') no-repeat 10px 50%; border: 1px solid #f5aca6; } .success { background: #e9ffd9 url('/wp-content/plugins/wp-content-copy-protector/images/success.png') no-repeat 10px 50%; border: 1px solid #a6ca8a; } .warning-wpcp { background: #ffecec url('/wp-content/plugins/wp-content-copy-protector/images/warning.png') no-repeat 10px 50%; border: 1px solid #f5aca6; } .notice { background: #e3f7fc url('/wp-content/plugins/wp-content-copy-protector/images/notice.png') no-repeat 10px 50%; border: 1px solid #8ed9f6; } </style> <script type='text/javascript'> /* <![CDATA[ */ var tocplus = { "visibility_show": "\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c", "visibility_hide": "\u0441\u043a\u0440\u044b\u0442\u044c", "width": "Auto" }; /* ]]> */ </script> <script type='text/javascript' src='https://md-rk.ru/wp-content/plugins/table-of-contents-plus/front.min.js?ver=1509'></script> <script type='text/javascript' src='https://md-rk.ru/wp-content/themes/colormag/js/jquery.bxslider.min.js?ver=4.2.10'></script> <script type='text/javascript' src='https://md-rk.ru/wp-content/themes/colormag/js/colormag-slider-setting.js?ver=4.9.2'></script> <script type='text/javascript' src='https://md-rk.ru/wp-content/themes/colormag/js/navigation.js?ver=4.9.2'></script> <script type='text/javascript' src='https://md-rk.ru/wp-content/themes/colormag/js/sticky/jquery.sticky.js?ver=20150309'></script> <script type='text/javascript' src='https://md-rk.ru/wp-content/themes/colormag/js/sticky/sticky-setting.js?ver=20150309'></script> <script type='text/javascript' src='https://md-rk.ru/wp-content/themes/colormag/js/fitvids/jquery.fitvids.js?ver=20150311'></script> <script type='text/javascript' src='https://md-rk.ru/wp-content/themes/colormag/js/fitvids/fitvids-setting.js?ver=20150311'></script> <script type='text/javascript' src='https://md-rk.ru/wp-content/themes/colormag/js/post-format.js?ver=20150422'></script> <script type='text/javascript' src='/wp-includes/js/wp-embed.min.js?ver=4.9.2'></script> </body> </html>