PHP: робота з рядками. Рядкові функції PHP

Сайти можна розділити на статичні та динамічні. Після освоєння HTML і CSS, які дозволяють зробити гарну візитку в інтернеті, багато хто замислюється, як створити динамічний сайт на PHP. При цьому верстальник повинен враховувати, що тепер він починає вивчати веб-програмування: принципи роботи з сайтом відрізнятимуться. Одна з перших проблем, з якою стикається початківець у PHP - робота з рядками, їх читання та обробка.

Варто зазначити, що в PHP мають на увазі велику кількість методів, тому починати їх вивчення варто з найпростіших маніпуляцій, таких як виведення рядка, пошук, отримання або заміна підрядка, зміна регістру та повернення довжини рядка. Багато функцій погано працюють з кириличними символами. Тому всі приклади написані англійською для наочності. Для кирилиць використовуються ті ж функції, але з префіксом mb_ (наприклад, mb_strpos()). Перш ніж використовувати аналоги, в php.ini необхідно розкоментувати рядок; extension = php_mbstring.dll, просто прибравши крапку з комою.

Створення та виведення рядка

Ми розберемо виведення рядка на екран за допомогою відомої мовної конструкції echo. Програміст може вивести рядок відразу:

echo "Це Новий Рядок"

або спочатку створити змінну, а потім вивести її на екран:

$str = "Це Новий Рядок";

Якщо потрібно вивести кілька рядків в одному, то вдаються до їхньої конкатенації:

echo "Це". "Нова". "Рядок";

$str1 = "Це";

$str2 = "Нова";

$str3 = "Рядок";

echo $str1 . $str2. $str3;

В останньому випадку на екран буде виведено ЦеНовийРядок. Пробіл можна додати відразу при виклику echo:

echo $str1 . " ". $str2. " ". $str3;

В цьому випадку на екран виведеться: "Це Новий Рядок". Конкатенація можлива не тільки під час виведення, а й під час створення рядка:

$str1 = "Це";

$str2 = "Нова";

$str3 = "Рядок";

$string = $str1 . " ". $str2. " ". $str3;

echo $string;

Echo виводить як так і кирилиці. Якщо одна зі змінних містила число, то при конкатенації це число буде перетворено на відповідний рядок:

$ sum = $ i + $ i; //тепер $sum містить число 4

echo $i. "+". $i . "=". $ sum;

На екран буде виведено: "2+2=4".

Службові символи

Припустимо, рядок визначено за допомогою ($string = "Ось так"). Тоді можна спокійно використовувати керуючі послідовності:

  • \n здійснює переклад рядка;
  • вертає каретку;
  • екранує подвійні лапки:
    • echo "Рядок з "подвійними" лапками"; //Рядок з "подвійними" лапками
  • \$ екранує долар;
  • екранує зворотну косу межу.

Послідовностей набагато більше, їх можна знайти в офіційній документації PHP.

Як знайти позицію першого входження підрядка

Припустимо, у нас є простий рядок:

Також у нас є два рядки з іменами:

$name = "Yemelyan";

$anotherName = "Katherin";

Нам необхідно дізнатися, чи містить перший рядок ці два назви. Для цього використовується функція strpos($str, $search). Вона повертає позицію шуканого підрядка $search, якщо цей рядок міститься у вихідному $str. В іншому випадку функція повертає бульова значення false. Наприклад, strpos($string, $anotherName) поверне false, а strpos($string, $name) ціле число. Код буде таким (напишемо варіант, коли позиція виводиться на екран):

$string = "My name is Yemelyan and I am 27 year old";

$name = "Yemelyan";

$anotherName = "Katherin";

echo strpos($string, $anotherName); //виведе false

echo strpos($string, $name); //виведе позицію першого входження підрядка

Врахуйте, що нумерація рядка починається з нуля, тобто в нашому випадку останній рядок виведе число 11 (пробіли також рахуються).

Пошук позиції останнього входження підрядки та підводні камені

Якщо функція strpos() повертає позицію першого входження, то обернена їй функція strrpos() шукає останнє входження підрядка.

Тут є деякі підводні камені, пов'язані з початком нумерації. Це варто враховувати: у PHP робота з рядками може бути ускладнена обмеженнями порівняння. Так, краще використовувати операцію порівняння з запереченням: strpos($str, $search)!=false. У будь-якій версії PHP приклади з подібною еквівалентністю можуть працювати неправильно, адже нумерація рядків починається з нуля, а в логічній інтерпретації 0 є false. Це поширюється і функцію strrpos().

Як знайти число входжень підрядка

Часто потрібно знайти не позицію першого або останнього входження підрядки в рядок, а їх загальне число. Для цього використовується функція substr_count(), яка обробляє щонайменше дві змінні: substr_count($str, $search). Повертає ціле число. Якщо необхідно зменшити область пошуку по рядку, то функцію передаються ще дві змінні: початок і кінець рядка відповідно. Тобто функція у разі викликається так: substr_count($str, $search, $start, $end). Функція шукатиме підстроку $search на проміжку від $start до $end вихідного рядка $str. Якщо рядок не буде знайдено, функція поверне нуль.

Як змінити регістр рядка у PHP: приклади

Зміна регістру часто використовується для порівняння рядків і Припустимо, користувач повинен ввести ім'я верховного бога У програмі є варіант "Один", з яким і порівнюватиметься відповідь користувача. Якщо введений текст не співпадатиме з наявним (наприклад, користувач напише "один" або "ОДИН"), то програма поверне значення false замість true. Щоб уникнути цього, застосовується функція зміни регістру. Це часто використовується, якщо сайт на PHP має теги: замість сотні варіантів слова "особисте" ("Особисте", "особисте", "Особисте" тощо) є лише один тег у нижньому регістрі.

Функція strtolower() змінює регістр на нижній. Допустимо, є рядок $catName = "Fluffy". Функція strtolower($catName) поверне рядок "fluffy". Змінити регістр на верхній можна за допомогою strtoupper().

Як знайти довжину рядка в PHP: робота з функціями

Часто потрібно знайти довжину рядка. Наприклад, у PHP робота з рядками такого роду може знадобитися у створенні циклу. Для пошуку рядка використовується функція strlen(), яка повертає число – кількість символів. Не можна забувати, що останній символ матиме номер strlen($str)-1, оскільки нумерація починається з нуля.

Отримання та заміна підрядки в PHP: робота з рядками

Отримання підрядка здійснюється функцією substr(), яка може приймати два чи три аргументи: substr($str, $start, $end). Допустимо, у нас є рядок $string = "Fluffy cat", і ми хочемо отримати підрядок з другого до четвертого символу. Так як нумерація починається з нуля, то змінна з цим підрядком виглядатиме так: $ newString = substr ($ string, 1, 4). Якщо ми введемо $newString = substr($string, 1), то отримаємо підрядок з другого символу по останній (тобто "luffy"). Цей код ідентичний повному коду рядка за допомогою strlen(): substr($string, 1, strlen($string)).

Для заміни підрядка використовується функція str_replace(), яка приймає три змінні: str_replace($subStr, $newSub, $str). На відміну від багатьох функцій, str_replace() коректно працює з символами кирилиці і не має аналога з префіксом. Приклад:

$str = "Сьогодні жахлива погода!";

$newStr = str_replace("жахлива", "чудова", $str); //Сьогодні чудова погода!

Переведення рядка до числа

Кожному, хто вивчає веб-програмування, рано чи пізно доводиться переводити рядок у число. Для цього використовуються дві схожі функції: intval() та floatval(), кожна з яких приймає одну змінну $string. Один від одного вони відрізняються тільки типом даних, що повертаються: intval() повертає ціле число, а floatval() - число з плаваючою точкою.

Для використання як intval(), так і floatval() необхідно, щоб рядок починався з цифр, вони будуть перетворені в число. Якщо після цифр йтиме будь-який набір букв, вони просто проігноруються. Якщо рядок починається з літер, використання функції поверне нуль. В ідеалі ж рядок має містити у собі виключно цифри.

Переведення числа в рядок

Часто потрібно перевести числа в рядок. Скажімо, якщо необхідно взяти половинку числа та звести її у квадрат (наприклад, перевірити, чи виконується рівність: 88 х 88 + 33 х 33 = 8833). У цьому випадку використовується функція strval(), яка повертає рядок із числом. Після цього з новим рядком можна здійснювати всі інші дії: змінювати, шукати входження підрядка та інші функції. У разі потреби рядок можна знову перевести в число вже описаним вище способом.

У статті було розглянуто лише невелику частину всіх функцій, що з рядками. Частина неописаних функцій працює із символами, але велика не була включена до матеріалу через специфічність. Для ознайомлення з цими функціями необхідно перейти до читання офіційної документації PHP, яка відображає актуальну інформацію.

Будь-який веб-програміст, що поважає себе, повинен знати мову РНР, яка може використовуватися для створення веб-сторінок. Ця мова заснована на С і С++, і тому в ній є безліч конструкцій, характерних для цієї мови. Наприклад, у PHP довжина рядка повертається функцією з такою самою назвою, як і в С. Ця стаття розповідає про рядки, а також про операції, які можна виконувати з ними.

Але перш ніж говорити про функції, дамо основне визначення. Рядок - це послідовність символів, кожен із яких займає рівно один байт. Отже, у РНР підтримується 256 символів. Із цього логічно випливає, що підтримка Юнікоду в цій мові відсутня - адже в Юнікоді символів набагато більше.

Які ж операції з рядками є у PHP? Довжина рядка, їхня конкатенація (з'єднання), повернення коду символу і навпаки - найпростіші приклади. Є й складніше – пошук підрядка, хешування, інвертування. А є такі, як видалення тегів, пошук за шаблоном, розбивка на підрядки за допомогою роздільника… Усього не перелічиш! Тому ми розповімо про найбільш поширені та корисні з них.

Найперша і найчастіше використовувана функція в PHP - довжина рядка. Називається вона strlen, а як параметр приймає одну-єдину послідовність символів. Все просто.

$ bar = strlen ($ foo); // $bar дорівнює трьом

У PHP довжина рядка може дорівнювати нулю. Такий рядок називається порожнім.

Наступна функція – конкатенація або злиття. Простіше кажучи, вона із двох рядків робить один.

$foo="Привіт,";

$bar="світ!";

$baz=concat ($foo, $bar);

echo $baz; // виведе "Привіт, мир!"

Існують і дві зворотні функції для роботи з окремими символами. Ord – повертає код символу, а chr – визначає символ за кодом.

$ bar = ord ($ foo); // $bar дорівнює 113

$baz=chr ($bar); // $baz дорівнює "q"

Не можна не згадати ще про одну цікаву функцію - date. У PHP рядки можуть використовуватися як шаблон для виведення часу. Наприклад, якщо передати в date рядок “H:m:s” та вивести результат, то на екрані з'явиться поточний час сервера, розділений двокрапкою, наприклад, “11:08:34”.

Тепер розглянемо функцію explode. Вона розбиває рядок на елементи, вважаючи межею кожного вказаний символ. Звучить досить складно, але насправді все зрозуміло. Наприклад, є рядок “root|12:56:49|wheel”. Тоді можна написати так:

$foo=explode(“root|12:56:49|wheel”, “|”);

У результаті масив $foo міститиме три елементи - "root", "12:56:49", "wheel". Якщо при виклику функції не вказувати роздільник, то за умовчанням він вважатиметься пробілом. Є ще один необов'язковий параметр - максимальна кількість підрядків, що виділяються.

Наступна функція видаляє з рядка HTML-теги. Називається вона strip_tags. Як і у функції explode, вона має необов'язковий другий параметр - список тегів, які необхідно залишити.

Прості функції – конкатенація, пошук підрядки, довжина рядка – PHP інтерпретує досить швидко. А ось обробка пошуку за шаблоном або видалення тегів може виконуватись досить довго. Тому програми потрібно складати грамотно, з урахуванням того, що її виконання займає певний час. Нормальний скрипт повинен виконуватися максимум 10 секунд, а після цього потрібно відобразити хоча б частину веб-сторінки, інакше користувач з неї піде. Але зазвичай веб-застосунки працюють набагато швидше, адже РНР-код виконується на сервері, і браузер приймає сформовану на основі скрипта сторінку, в якій міститься висновок PHP-скрипту.

Вставляє HTML код розриву рядка перед кожним перекладом рядка

  • number_format - Форматує число з поділом груп
  • ord - Повертає ASCII код символу
  • parse_str - Розбирає рядок у змінні
  • print - Виводить рядок
  • printf
  • quoted_printable_decode - Розкодує рядок, закодований методом quoted printable
  • quotemeta - Екранує спеціальні символи
  • rtrim - Видаляє прогалини з кінця рядка
  • sha1 - Повертає SHA1 хеш рядка
  • sha1_file - Повертає SHA1 хеш файлу
  • similar_text - обчислює ступінь схожості двох рядків
  • soundex - Повертає ключ soundex для рядка
  • sprintf
  • sscanf - Розбирає рядок відповідно до заданого формату
  • strcasecmp - Порівняння рядків без урахування регістру, безпечне для даних у двійковій формі
  • strcmp - Порівняння рядків, безпечне для даних у двійковій формі
  • strcoll - Порівняння рядків з урахуванням поточної локалі
  • strcspn - Повертає довжину ділянки на початку рядка, що не відповідає масці
  • stripcslashes - Видаляє екранування символів, зроблене функцією addcslashes()
  • stripos - Повертає позицію першого входження підрядка без урахування регістру
  • stripslashes - Видаляє екранування символів, зроблене функцією addslashes()
  • strip_tags - Видаляє HTML та PHP теги з рядка
  • stristr - Аналог функції strstr, але залежить від регістру
  • strlen - Повертає довжину рядка
  • strnatcasecmp - Порівняння рядків без урахування регістру з використанням алгоритму
  • strnatcmp - Порівняння рядків з використанням алгоритму "природного впорядкування"
  • strncasecmp
  • strncmp - Порівняння перших n символів рядків без урахування регістру, безпечне для даних у двійковій формі
  • strpos - Знаходить перше входження підрядка в рядок
  • strrchr
  • strrev - Перевертає рядок
  • strripos - Повертає позицію останнього входження підрядка без урахування регістру
  • strrpos - Знаходить останнє входження символу в рядок
  • strspn - Повертає довжину ділянки на початку рядка, що відповідає масці
  • strstr - Знаходить перше входження підрядка
  • strtok - Розбиває рядок
  • strtolower - Перетворює рядок на нижній регістр
  • strtoupper - Перетворює рядок у верхній регістр
  • strtr - Перетворює задані символи
  • str_ireplace - Реєстро-незалежний варіант функції str_replace().
  • str_pad - Доповнює рядок іншим рядком до заданої довжини
  • str_repeat - Повертає рядок, що повторюється
  • str_replace - Замінює рядок пошуку на рядок заміни
  • str_rot13 - Виконує над рядком перетворення ROT13
  • str_shuffle - Переставляє символи у рядку
  • str_split - Перетворює рядок на масив
  • str_word_count - Повертає інформацію про слова, що входять до рядка
  • substr - Функція повертає частину рядка
  • substr_count - Підраховує кількість входжень підрядка в рядок
  • substr_replace - Замінює частину рядка
  • trim - Видаляє прогалини з початку та кінця рядка
  • ucfirst - Перетворює перший символ рядка у верхній регістр
  • ucwords - Перетворює на верхній регістр перший символ кожного слова в рядку
  • vprintf - Виводить відформатований рядок
  • vsprintf - Повертає відформатований рядок
  • wordwrap - Виконує перенесення рядка на цю кількість символів за допомогою символу розриву рядка
  • Особливості операторів порівняння стосовно рядків.

    $one = 1; // Число одне. $ Zero = 0; // Привласнюємо число нуль. if ($one == "") echo 1; // Очевидно, не одно - не виводить 1. if ($ zero == "") echo 2; //* Увага! Всупереч очікуванням друкує 2! if ("" == $zero) echo 3; //* І це також не допоможе - друкує!.. if ("$zero" == "") echo 4; // Так правильно. if (strval($zero) == "") echo 5; // Так також правильно - не виводить 5. if ($zero === "") echo 6; // Кращий спосіб, але не діє PHP 3.

    chop()

    Функція chop() повертає рядок після видалення з нього завершальних перепусток та символів нового рядка. Синтаксис функції chop():

    string chop(string рядок)

    У наступному прикладі функція chop() видаляє зайві символи нового рядка:

    $header = "Table of Contents\n\n"; $header = chop($header); // $header = "Table of Contents"

    str_pad()

    Функція str_pad() вирівнює рядок до певної довжини заданими символами та повертає відформатований рядок. Синтаксис функції str_pad():

    string str_pad (string рядок, int довжина_доповнення [, string доповнення [, int тип_доповнення]])

    Якщо необов'язковий параметр доповнення не вказано, рядок доповнюється пробілами. В іншому випадку, рядок доповнюється заданими символами. За замовчуванням рядок доповнюється праворуч; тим не менш, ви можете передати у параметрі тип_доповнення константу STR_PAD_RIGHT, STR_PAD_LEFT або STR_PAD_BOTH, що призведе до доповнення рядка в заданому напрямку. Приклад демонструє доповнення рядка функцією str_pad() з параметрами за промовчанням:

    $ food = "salad"; print str_pad ($food, 5): // Виводить рядок "salad" У наступному прикладі використовуються необов'язкові параметри функції str_pad(): $header = "Table of Contents"; print str_pad ($header, 5, "=+=+=" , STR_PAD_BOTH); // У браузері виводиться рядок =+=+= Таbе of Contents=+=+="

    trim()

    Функція trim() видаляє псе пропуски з обох країв рядка і повертає отриманий рядок. Синтаксис функції trim():

    string trim (string країна)

    До віддалених перепусток відносяться і спеціальні символи \n, \r, \t, \v і \0.

    ltrim()

    Функція lrim() видаляє всі пропуски та спеціальні символи з лівого краю рядка та повертає отриманий рядок. Синтаксис функції ltrim():

    string ltrim (string рядок)

    Функція видаляє самі спеціальні символи, як і функція trim().

    strlen()

    Визначення довжини рядка

    Довжину рядка символів можна визначити за допомогою функції strlen(). Синтаксис.функції strlen():

    int strlen (string рядок)

    Наступний приклад демонструє визначення довжини рядка функцією strlen():

    $string = "hello"; $length = strlen($string); // $length = 5

    Порівняння двох рядків

    Порівняння двох рядків належить до найважливіших рядкових операцій будь-якої мови. Хоча це завдання можна вирішити кількома різними способами, у РНР існують чотири функції порівняння рядків:

    strcmp()

    Функція strcmp() порівнює два рядки з урахуванням регістру символів. Синтаксис функції strcmp(): int strcmp (string рядок1, string рядок2)

    Після завершення порівняння strcmp() повертає одне із трьох можливих значень:

    • 0, якщо рядок1 та рядок2 збігаються;
    • < 0, если строка1 меньше, чем строка2;
    • > 0, якщо рядок2 менше, ніж рядок1.

    $ sthng1 = "butter"; $string2 = "butter"; if ((strcmp($string1. $string2)) == 0) : print "Strings are equivalent!"; endif; // Команда if повертає TRUE

    strcasecmp()

    Функція strcasecmp() працює так само, як strcmp(), за одним винятком - регістр символів при порівнянні не враховується. Синтаксис функції strcasecmp():

    int strcasecmp (string строка1, string рядок2)

    У наступному фрагменті порівнюються два однакові рядки:

    $string1 = "butter"; $string2 = "Butter"; if ((strcmp($string1, $string2)) == 0) : print "Strings are equivalent!"; endif; // Команда if повертає TRUE

    strspn()

    Функція strspn() повертає довжину першого сегмента рядка1, що містить символи, що є у рядку2. Синтаксис функції strspn():

    int strspn (string рядок1, string рядок2)

    Наступний фрагмент показує, як функція strspn() використовується для перевірки пароля:

    $password = "12345"; if (strspn($password, "1234567890") != strlen($password)) : print "Password cannot consist solely of numbers!"; endif:

    strcspn()

    Функція strcspn() повертає довжину першого сегмента рядка1, що містить символи, відсутні в рядку2. Синтаксис функції strcspn():

    int strcspn (string рядок1, string рядок2)

    У наступному фрагменті функція strcspn() використовується для перевірки пароля:

    $password = "12345"; if (strcspn($password, "1234567890") == 0) : print "Password cannot consist solely of numbers!"; endif;

    Обробка рядкових даних без застосування регулярних виразів

    Під час обробки великих обсягів інформації функції регулярних виразів сильно уповільнюють виконання програми. Ці функції слід застосовувати лише для обробки щодо складних рядків, у яких регулярні висловлювання дійсно необхідні. Якщо аналіз тексту виконується за відносно простими правилами, можна скористатися стандартними функціями РНР, які помітно прискорюють обробку. Усі ці функції описані нижче.

    strtok()

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

    string strtok (string рядок, string роздільники)

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

    $info = "WJ Gi1more: [email protected]| Columbus, Ohio"; // Обмежувачі - двокрапка (:), вертикальна риса (|) і кома (.) $tokens = ":|,"; $tokenized = strtok($info, $tokens); // Вивести елементи масиву $tokenized while ($tokenized) : echo "Element = $tokenized
    // Зверніть увагу: при наступних викликах strtok // перший аргумент не передається $tokenized = strtok($tokens); endwhile; Результат: Element = WJGilmore Element = [email protected] Element = Columbus Element = Ohio

    parse_str()

    Функція parse_str() виділяє у рядку пари та надає значення змінних у поточній області видимості. Синтаксис функції parse_str():

    void parse_str (string рядок)

    Функція parse_str() особливо зручна при обробці URL-адрес, що містять дані форм HTML або іншу розширену інформацію. У цьому прикладі аналізується інформація, передана через URL. Рядок є стандартним способом передачі даних між сторінками або відкомпільованих у гіперпосиланні, або введених у форму HTML:

    $url = "fname=wj&lname=gilmore&zip=43210"; parse_str($url); // Після виконання parse_str() доступні такі змінні: // $fname = "wj": // $lname = "gilmore"; // $zip = "43210"

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

    explode()

    Функція explode() ділить рядок на елементи та повертає ці елементи у вигляді масиву. Синтаксис функції explode():

    array explode (string роздільник, string рядок [, int поріг])

    Розбиття відбувається за кожним екземпляром роздільника, причому кількість отриманих фрагментів може обмежуватися необов'язковим параметром поріг.

    Розділення рядка функцією explode() продемонстровано в наступному прикладі:

    $ info = "wilson | baseball | indians"; $user = explode("|", $info); // $user = "wilson"; // $user = "baseball"; // $user = "Indians";

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

    implode()

    Якщо функція explode() поділяє рядок на елементи масиву, її двійник - функція implode() - об'єднує масив у рядок. Синтаксис функції implode():

    string implode (string розділювач, array фрагменти)

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

    $ohio_cities = array ("Columbus", "Youngstown", "Cleveland", "Cincinnati"); $city_string = implode("l", $ohio_cities); // $ city_string = "Columbus | Youngstown | Cleveland | Cincinnati";

    У implode() є псевдонім – функція join().

    strpos()

    Функція strpos() знаходить у рядку перший екземпляр заданого підрядка. Синтаксис функції strpos():

    int strpos (string рядок, string підрядок [, int зсув])

    Необов'язковий параметр offset визначає позицію, з якої повинен починатися пошук. Якщо підрядок не знайдений, strpos() повертає FALSE (0).

    У наступному прикладі визначається позиція першого входження дати у файл журналу:

    $log = " 206.169.23.11:/www/:2000-08-10 206.169.23.11:/www/logs/:2000-02-04 206.169.23.11:/www/img/:1999-01-31" // У якій позиції у журналі вперше зустрічається 1999? $pos = strpos($log, "1999"); // $pos = 95. оскільки перший екземпляр "1999" // знаходиться в позиції 95 рядка, що міститься в змінній $log

    strrpos()

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

    int strpos (string рядок, символ char)

    За можливостями ця функція поступається своєму двійнику - функції strpos(), оскільки дозволяє шукати лише окремий символ, а чи не весь рядок. Якщо у другому параметрі strrpos() передається рядок, під час пошуку буде використано лише перший символ.

    str_replace()

    Функція str_replace() шукає у рядку всі входження заданого підрядка і замінює їх новим підрядком. Синтаксис функції str_replace():

    string str_replace (string підрядок, string заміна, string рядок)

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

    Якщо підрядок жодного разу не зустрічається у рядку, вихідний рядок не змінюється:

    $favorite_food = "My favorite foods є ice cream and chicken wings"; $favorite_food = str_replace("chicken_wings", "pizza", $favohte_food); // $favorite_food = "My favorite foods є ice cream and pizza"

    strstr()

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

    string strstr (string рядок, string підрядок)

    У цьому прикладі функція strstr() використовується для виділення імені домену з URL:

    $url = "http://www.apress.com"; $domain - strstr($url, "."); // $domain = ".apress.com"

    substr()

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

    string substr (string рядок, int початок [, int довжина])

    Якщо необов'язковий параметр довжина не вказано, вважається, що підрядок починається із заданої початкової позиції і продовжується до кінця рядка. При використанні цієї функції необхідно враховувати чотири обставини:

    • якщо параметр початок позитивний, повертається підрядок починається з позиції рядка із заданим номером;
    • якщо параметр початок від'ємний, повертається підрядок починається з позиції (довжина рядка - початок);
    • якщо параметр довжина позитивний, у підрядок, що повертається включаються всі символи від позиції початок до позиції початок + довжина. Якщо остання величина перевищує довжину рядка, символи повертаються до кінця рядка;
    • якщо параметр довжина від'ємний, підстрока, що повертається, закінчується на заданій відстані від кінця рядка.

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

    Наступний приклад демонструє виділення частини рядка функцією substr():

    $ car = "1944 Ford"; Smodel = substr ($ car, 6); // Smodel = "Ford"

    Приклад із позитивним параметром довжина:

    $ car = "1944 Ford"; $model = substr($car, 0, 4); // $model = "1944" Приклад із негативним параметром довжина: $ car = "1944 Ford"; $model = substr($car, 2, -5); // $model = "44"

    substr_count()

    Функція substr_count() повертає кількість входжень підрядка в заданий рядок. Синтаксис функції substr_count(): int substr_count (string рядок, string підрядок) У наступному прикладі функція substr_count() підраховує кількість входжень підрядка ain: $tng_twist = "The rain falls mainly on the plains of Spain"; $count = substr_count($tng_twist, "ain"); // $count = 4

    substr_replace()

    Функція substr_replace() замінює частину рядка, що починається із заданої позиції. Якщо встановлено необов'язковий параметр довжина, замінюється фрагмент заданої довжини; в іншому випадку проводиться заміна по всій довжині рядка, що замінює. Синтаксис функції substr_replace():

    string substr_replace (string рядок, string заміна, int початок [, int довжина])

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

    • якщо параметр початок позитивний, заміна починається із заданої позиції;
    • якщо параметр початок негативний, заміна починається з позиції (довжина рядка-початок);
    • якщо параметр довжина позитивний, замінюється фрагмент заданої довжини;
    • якщо параметр довжина негативний, заміна завершується в позиції (довжина рядка -довжина).

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

    $favs = "s favorite links"; $name = "Alessia"; , 0, 0);

    Результат:

    Alessia"s favorite links

    Перетворення рядків та файлів до формату HTML та навпаки

    Перетворити рядок або цілий файл до формату, який підходить для перегляду в web-браузері (або навпаки), простіше, ніж може здатися на перший погляд. У РНР при цьому існують спеціальні функції.

    Перетворення тексту на HTML

    Швидке перетворення простого тексту до формату web-браузера - дуже поширене завдання. У її вирішенні вам допоможуть функції, описані в цьому розділі.

    nl2br()

    Функція nl2br() замінює всі символи нового рядка (\n) еквівалентними конструкціями HTML.

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

    string nl2br (string рядок)

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

    // Текстовий рядок, що відображається у редакторі. $text_recipe = " Party Sauce recipe: 1 може стиснутий rajčatа 3 tablespoons fresh lemon juice Stir together, server cold."; // Перетворити символи нового рядка на
    $htinl_recipe = nl2br($text_recipe) При наступному виведенні $html_recipe браузеру буде переданий наступний текст у форматі HTML: Party Sauce recipe:
    1 can stewed tomatoes
    3 tablespoons fresh lemon juice
    Stir together, server cold.

    htmlentities()

    Функція htmlentities() перетворює символи на еквівалентні конструкції HTML. Синтаксис функції htmlentities:

    string htmlentities (string рядок)

    У наступному прикладі виконується необхідна заміна символів рядка для виведення у браузері:

    $user_input = "Cookbook, відомий як Cafe Francaise"

    Функція htmlentities() в даний час працює тільки для символів кодування ISO-8559-1 (ISO-Latin-1). Крім того, вона не перетворює прогалини в, як слід було б очікувати.

    htmlspecialchars()

    Функція htmlspecialchars() замінює деякі символи, що мають особливий зміст у контексті HTML, еквівалентними конструкціями HTML. Синтаксис функції htmlspecialchars():

    string htmlspecialchars (string рядок)

    Функція html special chars() в даний час перетворює такі символи: & перетворюється на &; " " перетворюється на " ; перетворюється на >.

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

    Наступний приклад демонструє видалення потенційно небезпечних символів функцією htmlspeclalchars():

    $user_input = "I just can"t get of PHP & those fabulous cooking recipes!"; $conv_input = htmlspecialchars($user_input); // $conv_input = "I just can"t<> of PHP & those fabulous cooking recipes!"

    Якщо функція htmlspecialchars() використовується у поєднанні з nl2br(), то останню слід викликати після htmlspecialchars(). В іншому випадку конструкції
    , згенеровані під час виклику nl2br(), перетворюються на видимі символи.

    get_html_translation_table()

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

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

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

    Параметр таблиця набуває одного з двох значень:

    • HTML_ENTITIES;
    • HTML_SPECIALCHARS.

    У наступному прикладі функція get_html_translation_table() використовується при перетворенні тексту на код HTML:

    $string = "La pasta e il piatto piu amato in Italia"; $translate = get_html_translation_table(HTML_ENTITIES); print strtr($string, $translate); // Спеціальні символи перетворюються на конструкції HTML // і правильно відображаються у браузері.

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

    У цьому прикладі вихідний текст відновлюється функцією array_flip():

    $translate = array_flip($translate); $translated_string - "La pasta é il piatto piu amato in Italia"; $original_string = strtr($translated_string, $translate); // $original_string = "La pasta e il piatto piu amato in Italia";

    strtr()

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

    string strtr (string рядок, string джерело, string приймач)

    Якщо рядки джерело та приймач мають різну довжину, довгий рядок усікається до розмірів короткого рядка.

    Існує альтернативний синтаксис виклику strtr() із двома параметрами; в цьому випадку другий параметр містить асоціативний масив, ключі якого відповідають замінним підрядків, а значення - замінним підрядкам. У наступному прикладі теги HTML замінюються XML-подібними конструкціями:

    " => "

    ", "" => "

    "); $string = "

    Today In PHP-Powered News

    "; print strtr($string, $source); // Виводиться рядок " Today in PHP-Powered News" ?>

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

    Іноді виникає потреба перетворити файл у форматі HTML на простий текст. Функції, описані нижче, допоможуть вам у вирішенні цього завдання.

    strip_tags()

    Функція strip_tags() видаляє з рядка всі теги HTML та РНР, залишаючи в ній лише текст. Синтаксис функції strip_tags():

    string strip_tags (string рядок [, string дозволені_тери])

    Необов'язковий параметр дозволені теги дозволяє вказати теги, які повинні пропускатися в процесі видалення.

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

    $user_input = "I just loveРНР and gourment recipes!"; $stripped_input = strip_tags($user_input); // $stripped_input = "I just love PHP and gourmet recipes!";

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

    $input = "I love to eat!!"; $strip_input = strip_tags ($user_input, " // $strip_input = "I love to eat!!";

    Видалення тегів з тексту також виконується функцією fgetss().

    get_meta_tags()

    Хоча функція get_meta_tags() і не має прямого відношення до перетворення тексту, це дуже корисна функція, про яку слід згадати. Синтаксис функції get_meta_tags():

    array get_meta_tags (string ім'я_файлу/URL [, int включення_шляху])

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

    Мітки МЕТА містять інформацію про сторінку, яка використовується головним чином пошуковими системами. Ці теги знаходяться всередині пари тегів. Застосування тегів МЕТА продемонстровано в наступному фрагменті (назвемо його example.html, оскільки він буде використовуватися в лістингу 8.2): PHP Recipes Функція get_meta_tags() шукає в заголовку документа теги, що починаються словом МЕТА, і зберігає імена тегів та їх вміст в. У лістингу 8.2 показано застосування цієї функції до файлу example.html. Лістинг 8.2. Вилучення тегів МЕТА з файлу HTML функцією get_meta_tags()

    $meta_tags = get_meta_tags("example.html"): // Змінна $meta_tags містить масив з такою інформацією: // $meta_tags["keywords"] = "PHP, code, recipes, web" // $meta_tags["description" ] = "Інформація про PHP" // $meta_tags["author"] = "KDG";

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

    Перетворення рядка до верхнього та нижнього регістру

    У РНР існує чотири функції, призначені для зміни регістру рядка:

    strtolower()

    Функція strtolower() перетворює всі алфавітні символи рядка до нижнього регістру. Синтаксис функції strtolower():

    string strtolower(string рядок)

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

    $sentence = "COOKING and PROGRAMMING PHP є my TWO favorite!"; $sentence = strtolower($sentence); // Після виклику функції $sentence містить рядок // "cooking and programming php are my two favorite!"

    strtoupper()

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

    string strtoupper (string рядок)

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

    $sentence = "cooking and programming PHP є мої два favorite!"; $sentence = strtoupper($sentence); // Після виклику функції $sentence містить рядок // "COOKING AND PROGRAMMING PHP ARE MY TWO FAVORITE!"

    ucfirst()

    Функція ucfirst() перетворює на верхній регістр перший символ рядка - за умови, що він є алфавітним символом. Синтаксис функції ucfirst():

    string ucfirst (string рядок)

    Неалфавітні символи функцією не змінюються. Перетворення першого символу рядка функцією ucfirst() продемонстровано в наступному прикладі:

    &sentence = "cooking and programming PHP є мої два favorite!"; $sentence = ucfirst($sentence); // Після виклику функції $sentence містить рядок // "Cooking and programming PHP are mу two favorite!"

    ucwords()

    Функція ucwords() перетворює до верхнього регістру першу літеру кожного слова у рядку. Синтаксис функції ucwords():

    string ucwords (string рядок)

    Неалфавітні символи функцією не змінюються. "Слово" визначається як послідовність символів, відокремлена від інших елементів рядка пробілами. У наступному прикладі продемонстровано перетворення перших символів слів функцією ucwords():

    $sentence = "cooking and programming PHP є мої два favorite!"; $sentence = ucwords($sentence); // Після виклику функції $sentence містить рядок // "Cooking And Programming PHP Are My Two Favorite!"

    strrchr()

    strrchr("рядок", "о") - Знаходить останнє входження підрядка

    Якщо підрядок не знайдено, повертає FALSE.

    На відміну від strchr(), якщо рядок складається більш ніж з одного символу, використовується тільки перший символ.

    Якщо другий параметр не є рядком, він наводиться до цілого та трактується як код символу.

    // отримати останню директорію $PATH $dir = substr(strrchr($PATH, ":"), 1); // одержати все після останнього перекладу рядка $text = "Line 1\nLine 2\nLine 3"; $last = substr(strrchr($text, 10), 1);

    highlight_string()

    highlight_string-виділення синтаксису рядка.

    mixed highlight_string (string str [, bool return])

    Функція highlight_string() виводить версію з розквітленим синтаксисом рядка str, використовуючи кольори, визначені у вбудованому виділенні синтаксису PHP.

    Якщо другий параметр return має значення TRUE, highlight_string() поверне версію розфарбованого коду як рядок, замість її друку. Якщо другий параметр не має значення TRUE, highlight_string() поверне TRUE у разі успіху, FALSE у разі невдачі.

    Примітка: 1.параметр return став доступним, починаючи з PHP 4.2.0. Доти він працював, як за умовчанням, тобто. FALSE.
    2.Функція Highlight_String() розрізняє PHP код за тегами. show_source()- синонім highlight_file(). Щоб змінити колір виділення за замовчуванням, використовуйте такі PHP директиви:

    Highlight.bg #FFFFFF highlight.comment #FF8000 highlight.default #0000BB highlight.html #000000 highlight.keyword #007700 highlight.string #DD0000 в.htaccess: php_flag highlight.bg #FFFFFF в PHP: .bg")=="") ...

    addslashes()

    - Екранує спецсимволи у рядку

    Повертає термін, в якому перед кожним спецсимволом додано зворотний слеш (\), наприклад, для подальшого використання цього рядка в запиті до бази даних.

    Екрануються одиночна лапка ("), дійна лапка ("), зворотний слеш (\) і NUL (байт NULL).

    $str = "Is your name O"reilly?"; // виводить: Is your name O\"reilly? echo addslashes($str);

    stripslashes

    - Видаляє екранування символів, зроблене функцією addslashes() Видаляє екрануючі бекслеші. (\" перетворюється на ", і т.д.). Подвійні бекслеші (\\) перетворюється на одиночні(\).

    wordwrap()

    Виконує перенесення рядка на кількість символів з використанням символу розриву рядка // Використання wordwrap(). function cite($ourText, $maxlen=60, $prefix="> ") ( $st = wordwrap($ourText, $maxlen-strlen($prefix), "\n"); $st = $prefix.str_replace( "\n", "\n$prefix", $st); return $st; За його monumental failure. Inevitability of its doom is apparent to me now as consequence of imperfection inherent in every human being. was again frustrated by failure.", 20);

    > The first Matrix I > designed was quite > naturally > perfect, it was a > work of art - > flawless, sublime. > A triumph > equalled only by > its monumental > failure. The > inevitability > of its doom is > apparent to me now > as a consequence > of the > imperfection > inherent in every > human being. Тому, > I > redesigned it > заснований на вашому > history to more > accurately reflect > the varying > grotesqueries of > your nature. > However, I was > again > frustrated by > failure.


    Читати далі: Об'єктне програмування на PHP
    .

    Рядки - це один з основних типів змінних у 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.

    довжина символів (7)

    => string(141) означає, що $message - масив, тому ви повинні зробити strlen($message)< 141 ...

    У мене є рядок завдовжки 141 символ. Використовуючи наступний код, у мене є оператор if, щоб повернути повідомлення, якщо рядок більше або менше 140.

    Libxml_use_internal_errors(TRUE); $dom = new DOMDocument(); $dom->loadHTMLFile($source); $xml = simplexml_import_dom($dom); libxml_use_internal_errors(FALSE); $message = $xml->xpath("//div[@class="contest"]"); if (strlen($message)< 141) { echo "There Are No Contests."; } elseif(strlen($message) >142) ( echo "There is One Active Contest."; )

    Я використовував var_dump $ message, і він показує, що рядок => string(141) ось моя проблема. Коли я зміню числа для оператора if на<130 и>131 він все одно повертає 1-е повідомлення, хоча рядок більше 131. Незалежно від того, яке число я використовую менше 141, я завжди отримую «Немає конкурсів». повернувся до мене.

    => string(141) означає, що $message - це масив, а не рядок, а $message - рядок завдовжки 141 символ

    xpath не повертає рядок. Він повертає масив з елементами xml, які можуть бути відправлені до рядка.

    If (count($message)) ( if (strlen((string)$message))< 141) { echo "There Are No Contests."; } else if(strlen((string)$message) >142) ( echo "There is One Active Contest."; ) )

    замість цього спробуйте загальний синтаксис:

    If (strlen($message)<140) { echo "less than 140"; } else if (strlen($message)>140) ( echo "more than 140"; ) else ( echo "exactly 140"; )

    Оскільки $xml->xpath завжди повертає масив , strlen чекає рядок .

    Я мав проблеми з цим, і, нарешті, я вирішив створити власне рішення. Без використання механізму регулярних виразів:

    Function contains($text, $word) ( $found = false; $spaceArray = explode(" ", $text); $nonBreakingSpaceArray = explode(chr(160), $text); if (in_array($word, $spaceArray ) || in_array($word, $nonBreakingSpaceArray)) ( $found = true; ) return $found;

    Ви можете помітити, що попередні рішення не відповідають на те, що слово використовується як префікс для іншого. Щоб використати ваш приклад:

    $a = "How are you?"; $b = "a skirt that flares from the waist"; $ c = "are";

    З прикладами вище, як $a і $b містить $c, але ви можете захотіти, щоб ваша функція повідомила вам, що тільки $a містить $c.



    Подібні публікації