Практическое занятие № 25
Тема: «Работа со строковыми функциями в PHP»
Цель работы: приобретение навыков использования строковых функций.
Краткие теоретические основания выполнения задания
Для работы с кириллическими символами в PHP может использоваться несколько видов кодировок. Самыми распространенными на данный момент являются win‐1251 и utf‐8.
Кодировка utf‐8 является предпочтительной и, на данный момент времени, наиболее перспективной.
Проблемой может стать то, что, в отличие от win‐1251, utf‐8 является многобайтной кодировкой, то есть символ в UTF‐8 может определяться несколькими байтами, а не одним байтом.
Пример:
Допустим, из строки «Тестовая строка» мы хотим вырезать первые четыре символа. Для этого воспользуемся функций PHP substr, пишем:
substr( 'Тестовая строка', 0, 4);
А вот результат, зависит от того в какой кодировке находится строка. Если кодировка ASCII, то результат будет, как и ожидается, «Тест». А в случае UTF‐8 результат изменится на «Те». Причина такого отличия заключается в особенности работы функции substr. Substr работает не с символами строки, а с байтами. Поэтому, если строка в однобайтной кодировке, т.е. число байт равно числу символов, то функция отработает корректно. Если же количество байт не равно количеству символов, то результат будет неверным.
В данном примере substr отрезал от строки четыре байта. Символы кириллицы кодируются в UTF‐8 двумя байтами, вот и получилось в результате два символа, вместо четырех. Если бы мы отрезали нечетное количество символов, то в результате получили бы «усечение» последнего символа, это бы и вызвало странный визуальный эффект в конце строки.
Для корректной работы с многобайтными кодировками в PHP предусмотрен набор функций, их легко можно узнать по наличию приставки «mb_».
Рассмотрим корректный код усечения строки в многобайтной кодировка:
mb_internal_encoding("UTF-8"); // указываем нужную кодировку
mb_substr( 'Тестовая строка', 0, 4); // выполняем преобразование строки Операция усечения выполняется в два этапа, сначала задается кодировка строки и только после этого выполняется усечение.
Кодировку достаточно указать только один раз, даже в случае применения нескольких функций.
Функции работы с многобайтными строками
mb_convert_case — Производит смену регистра символов в строке
Описание
string mb_convert_case ( string $str , int $mode [, string $encoding = mb_internal_encoding() ] )
Производит смену регистра символов в строке string в соответствии с режимом mode.
Список параметров
str ‐ строка (string) для преобразования.
mode ‐ режим смены регистра. Это может быть одна из
констант MB_CASE_UPPER, MB_CASE_LOWER или MB_CASE_TITLE.
Encoding ‐ параметр encoding представляет собой символьную кодировку. Если он опущен, вместо него будет использовано значение внутренней кодировки.
Возвращаемые значения
Строка string преобразованная в соответствии с режимом mode.
Юникод
В отличие от стандартных функций смены регистра, вроде strtolower() и strtoupper(), смена регистра осуществляется на основе свойств символа Юникода. Таким образом, на поведение функции не влияют региональные настройки системы, и она может конвертировать любые символы, имеющие 'алфавитное' свойство, как например А‐умляут (Ä).
Пример #1 Пример использования mb_convert_case()
$str = "у мэри был маленький ягненок и она его очень любила";
$str = mb_convert_case($str, MB_CASE_UPPER, "UTF-8");
echo $str; // Выведет У МЭРИ БЫЛ МАЛЕНЬКИЙ ЯГНЕНОК И ОНА ЕГО ОЧЕНЬ ЛЮБИЛА
$str = mb_convert_case($str, MB_CASE_TITLE, "UTF-8");
echo $str; // Выведет У Мэри Был Маленький Ягненок И Она Его Очень Любила
?
Пример #2 Пример использования mb_convert_case() с нелатинским UTF‐8 текстом
$str = "Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός";
$str = mb_convert_case($str, MB_CASE_UPPER, "UTF-8");
echo $str; // Выведет ΤΆΧΙΣΤΗ ΑΛΏΠΗΞ ΒΑΦΉΣ ΨΗΜΈΝΗ ΓΗ, ΔΡΑΣΚΕΛΊΖΕΙ ΥΠΈΡ ΝΩΘ ΡΟΎ ΚΥΝΌΣ
$str = mb_convert_case($str, MB_CASE_TITLE, "UTF-8");
echo $str; // Выведет Τάχιστη Αλώπηξ Βαφήσ Ψημένη Γη, Δρασκελίζει Υπέρ Νωθ ρού Κυνόσ
?
Оборудование, материалы
Персональный компьютер с установленной ОС. Текстовый редактор Notepad++ или аналогичный. Open Server.
Порядок выполнения задания Примеры решения задач
Задача 1. Дана строка 'minsk'. Сделайте из нее строку 'MINSK'.
Решение: воспользуемся функцией strtoupper и сразу получим результат:
echo strtoupper('minsk');
?
Задача 2. Дана строка 'минск'. Сделайте из нее строку 'МИНСК'.
Решение: функцией strtoupper мы не можем воспользоваться, так как она некорректно работает с русскими буквами. Воспользуемся функцией mb_strtoupper и сразу получим результат:
echo mb_strtoupper('минск');
?
Задача 3. Дана строка 'MINSK'. Сделайте из нее строку 'Minsk'.
Решение: готовой функции для решения задачи в PHP не существует. Поэтому сначала воспользуемся функцией strtolower (в результате получится 'minsk'), а затем функцией ucfirst:
echo ucfirst(strtolower('minsk'));
?
Задача 4. В переменной $date лежит дата в формате '31‐12‐2030'. Преобразуйте эту дату в формат
'2030.12.31'.
Решение: для начала разобьем строку '31‐12‐2030' в массив с помощью функции explode:
//Разбиваем строку в массив по разделителю '-':
$arr = explode('-', '31-12-2030');
?
В полученном массиве в $arr[0] будет лежать 31 (то есть день), в $arr[1] ‐ месяц, а в $arr[2] ‐ год. Сольем элементы этого массива в новую строку:
//Разбиваем строку в массив по разделителю '-':
$arr = explode('-', '31-12-2030');
//Получим дату в нужном формате:
echo $arr[2].'.'.$arr[1].'.'.$arr[0];
?
Задачи для решения
Работа с регистром символов
Для решения задач данного блока вам понадобятся следующие функции: strtolower, strtoupper, ucfirst, lcfirst, ucwords.
Дана строка 'php'. Сделайте из нее строку 'PHP'.
Дана строка 'PHP'. Сделайте из нее строку 'php'.
Дана строка 'london'. Сделайте из нее строку 'London'.
Дана строка 'London'. Сделайте из нее строку 'london'.
Дана строка 'london is the capital of great britain'. Сделайте из нее строку 'London Is The Capital Of Great Britain'.
Дана строка 'LONDON'. Сделайте из нее строку 'London'.
Работа с strlen
Для решения задач данного блока вам понадобятся следующие функции: strlen.
Дана строка 'html css php'. Найдите количество символов в этой строке.
Дана переменная $password, в которой хранится пароль пользователя. Если количество символов пароля больше 5‐ти и меньше 10‐ти, то выведите пользователю сообщение о том, что пароль подходит, иначе сообщение о том, что нужно придумать другой пароль.
Работа с substr
Для решения задач данного блока вам понадобятся следующие функции: substr.
Дана строка 'html css php'. Вырежьте из нее и выведите на экран слово 'html', слово 'css' и слово 'php'.
Дана строка. Вырежите и выведите на экран последние 3 символа этой строки.
Дана строка. Проверьте, что она начинается на 'http://'. Если это так, выведите 'да', если не так ‐ 'нет'.
Дана строка. Проверьте, что она начинается на 'http://' или на 'https://'. Если это так, выведите 'да', если не так ‐ 'нет'.
Дана строка. Проверьте, что она заканчивается на '.png'. Если это так, выведите 'да', если не так ‐ 'нет'.
Дана строка. Проверьте, что она заканчивается на '.png' или на '.jpg'. Если это так, выведите
'да', если не так ‐ 'нет'.
Дана строка. Если в этой строке более 5‐ти символов ‐ вырежите из нее первые 5 символов, добавьте троеточие в конец и выведите на экран. Если же в этой строке 5 и менее символов ‐ просто выведите эту строку на экран.
Работа с str_replace
Для решения задач данного блока вам понадобятся следующие функции: str_replace.
Дана строка '31.12.2013'. Замените все точки на дефисы.
Дана строка $str. Замените в ней все буквы 'a' на цифру 1, буквы 'b' ‐ на 2, а буквы 'c' ‐ на 3.
Дана строка с буквами и цифрами, например, '1a2b3c4b5d6e7f8g9h0'. Удалите из нее все цифры. То есть в нашем случае должна получится строка 'abcbdefgh'.
Работа с strtr
Для решения задач данного блока вам понадобятся следующие функции: strtr.
Дана строка $str. Замените в ней все буквы 'a' на цифру 1, буквы 'b' ‐ на 2, а буквы 'c' ‐ на 3.
Решите задачу двумя способами работы с функцией strtr (массив замен и две строки замен).
Работа с substr_replace
Для решения задач данного блока вам понадобятся следующие функции: substr_replace.
Дана строка $str. Вырежите из нее подстроку с 3‐го символа (отсчет с нуля), 5 штук и вместо нее вставьте '!!!'.
Работа с strpos, strrpos
Для решения задач данного блока вам понадобятся следующие функции: strpos, strrpos.
Дана строка 'abc abc abc'. Определите позицию первой буквы 'b'.
Дана строка 'abc abc abc'. Определите позицию последней буквы 'b'.
Дана строка 'abc abc abc'. Определите позицию первой найденной буквы 'b', если начать поиск не с начала строки, а с позиции 3.
Дана строка 'aaa aaa aaa aaa aaa'. Определите позицию второго пробела.
Проверьте, что в строке есть две точки подряд. Если это так ‐ выведите 'есть', если не так ‐
'нет'.
Проверьте, что строка начинается на 'http://'. Если это так ‐ выведите 'да', если не так ‐ 'нет'.
Работа с explode, implode
Для решения задач данного блока вам понадобятся следующие функции: explode, implode.
Дана строка 'html css php'. С помощью функции explode запишите каждое слово этой строки в отдельный элемент массива.
Дан массив с элементами 'html', 'css', 'php'. С помощью функции implode создайте строку из этих элементов, разделенных запятыми.
В переменной $date лежит дата в формате '2013‐12‐31'. Преобразуйте эту дату в формат
'31.12.2013'.
Работа с str_split
Для решения задач данного блока вам понадобятся следующие функции: str_split.
Дана строка '1234567890'. Разбейте ее на массив с элементами '12', '34', '56', '78', '90'.
Дана строка '1234567890'. Разбейте ее на массив с элементами '1', '2', '3', '4', '5', '6', '7', '8', '9',
'0'.
Дана строка '1234567890'. Сделайте из нее строку '12‐34‐56‐78‐90' не используя цикл.
Работа с trim, ltrim, rtrim
Для решения задач данного блока вам понадобятся следующие функции: trim, ltrim, rtrim.
Дана строка. Очистите ее от концевых пробелов.
Дана строка '/php/'. Сделайте из нее строку 'php', удалив концевые слеши.
Дана строка 'слова слова слова.'. В конце этой строки может быть точка, а может и не быть. Сделайте так, чтобы в конце этой строки гарантировано стояла точка. То есть: если этой точки нет ‐ ее надо добавить, а если есть ‐ ничего не делать. Задачу решите через rtrim без всяких ифов.
Работа с strrev
Для решения задач данного блока вам понадобятся следующие функции: strrev.
Дана строка '12345'. Сделайте из нее строку '54321'.
Проверьте, является ли слово палиндромом (одинаково читается во всех направлениях, примеры таких слов: madam, otto, kayak, nun, level).
Работа с str_shuffle
Для решения задач данного блока вам понадобятся следующие функции: str_shuffle.
Дана строка. Перемешайте символы этой строки в случайном порядке.
Создайте строку из 6‐ти случайных маленьких латинских букв так, чтобы буквы не повторялись. Нужно сделать так, чтобы в нашей строке могла быть любая латинская буква, а не ограниченный набор.
Работа с number_format
Для решения задач данного блока вам понадобятся следующие функции: number_format.
Дана строка '12345678'. Сделайте из нее строку '12 345 678'.
Работа с str_repeat
Для решения задач данного блока вам понадобятся следующие функции: str_repeat.
Нарисуйте пирамиду, как показано на рисунке, только у вашей пирамиды должно быть 9
рядов, а не 5. Решите задачу с помощью одного цикла и функции str_repeat. x
xx xxx xxxx xxxxx
Нарисуйте пирамиду, как показано на рисунке. Решите задачу с помощью одного цикла и функции str_repeat.
1
22
333
4444
55555
666666
7777777
88888888
999999999
Работа с strip_tags и htmlspecialchars
Для решения задач данного блока вам понадобятся следующие функции: htmlspecialchars, strip_tags.
Дана строка 'html, php, js'. Удалите теги из этой строки.
Дана строка $str. Удалите все теги из этой строки, кроме тегов и .
Дана строка 'html, php, js'. Выведите ее на экран 'как есть': то есть браузер не должен преобразовать в жирный.
Работа с chr и ord
Для решения задач данного блока вам понадобятся следующие функции: chr, ord.
Узнайте код символов 'a', 'b', 'c', пробела.
Изучите таблицу ASCII. Определите границы, в которых располагаются буквы английского алфавита.
Выведите на экран символ с кодом 33.
Запишите в переменную $str случайный символ ‐ большую букву латинского алфавита. Подсказка: с помощью таблицы ASCII определите какие целые числа соответствуют большим буквам латинского алфавита.
Запишите в переменную $str случайную строку $len длиной, состоящую из маленьких букв латинского алфавита. Подсказка: воспользуйтесь циклом for или while.
Дана буква английского алфавита. Узнайте, она маленькая или большая.
Работа с strchr, strrchr
Для решения задач данного блока вам понадобятся следующие функции: strchr, strrchr.
Дана строка 'ab‐cd‐ef'. С помощью функции strchr выведите на экран строку '‐cd‐ef'.
Дана строка 'ab‐cd‐ef'. С помощью функции strrchr выведите на экран строку '‐ef'.
Работа с strstr
Для решения задач данного блока вам понадобятся следующие функции: strstr.
Дана строка 'ab‐‐cd‐‐ef'. С помощью функции strstr выведите на экран строку '‐‐cd‐‐ef'.
Задачи
Преобразуйте строку 'var_test_text' в 'varTestText'. Скрипт, конечно же, должен работать с любыми аналогичными строками.
Дана строка следующего вида: 5 цифр, затем пробел, затем еще 5 цифр. Например, дана такая строка '12345 67890'. Сделайте из нее строку '54321 09876'.
Дан массив с числами. Выведите на экран все числа, в которых есть цифра 3.
Дан массив с числами. Посчитайте суммарное количество цифр 3 в этих числах.
Ресурсы и ссылки
http://code.mu/tasks/php/base/rabota‐so‐strokovymi‐funkciyami‐v‐php.html
http://code.mu/books/php/base/rabota‐so‐strokovymi‐funkciyami‐v‐php.html