Однією з найбільш часто зустрічаються завдань у
програмуванні є обробка символьних послідовностей. Якщо простіше
- Строк. Як це робиться на мові гіпертекстового препроцесора РНР і є
тема цієї статті. p>
Звідки і як можна отримати символьну
послідовність? У самому простому випадку - привласнити її потрібної змінної.
Інші варіанти - отримати з форми або з файлу. Якщо Ви привласнюєте
змінної потрібне значення, то воно, як правило, не потребує обробки, так
як програміст робить присвоєння в коді програми, і звичайно, в потрібному вигляді.
Але якщо рядок зчитується з файлу, або виходить за допомогою форми, вона
(символьний рядок) має потребу в обробці. p>
Найперше, що варто зробити, це видалити
повторювані пробіли. Для цього в РНР є спеціальна функція: chop (str);
Приклад її запису: p>
$ str = chop ($ str); p>
В результаті, оброблене значення рядка $ str НЕ
буде містити повторюваних пробілів. Якщо потрібно переконатися в тому, що рядок
не містить пробілів на початку і в кінці, застосовується функція trim (str); ($ str = trim ($ str);). Коли
потрібно видалити пробіли тільки з початку рядка, потрібно використовувати ltrim. І
якщо вже зайшла мова про початок рядка, давайте переконаємося, що перший символ
заголовний. Що б зробити його таким, застосуєте ucfirst (str); Є і функція для перекладу під
усіх словах у рядку їх перших літер в великі - ucwords (str);. Крім того,
дуже часто буває необхідно порівняти рядок з деяким шаблоном. Приватний
випадок - пошук в рядку (про нього трохи пізніше). Але немає ніякої гарантії, що
отримана рядок введена користувачем або отримана з файлу відповідно до
правилами правопису. Іншими словами - рядок може містити в середині слова
або пропозиції чергуються заголовні та прописні символи. Рішення даної
проблеми - в застосуванні функцій strtolower (str); і strtoupper (st);. Ці
функції, відповідно, переводять символьні рядки в нижній і верхній
регістр. Комбінування даних можливостей мови РНР призводить до коректної
побудови рядка не залежно від того, як вона була введена або отримана в
початковому вигляді. p>
Ще одна необхідна річ при роботі з рядками - їх
обрізка. Часто вона застосовується при обробці форм для введення даних.
Уявіть, що хто-небудь з Ваших <доброзичливців> введе в Вашу гостьову книгу текст цієї
статті. Уявляєте, що вийде? Ось для цього і потрібно обмежити
кількість символів, що вводять в будь-якому полі форми. Тим більше, що робиться це
дуже просто. Для початку, потрібно прописати обмеження в самій формі: p>
p>
Тепер форма з ім'ям form обмежена в кількості
символів, що вводять числом 100. Але це ще далеко не все. Справа в тому, що обійти
таке обмеження дуже просто, і потрібно воно скоріше для того, щоб показати
відвідувачеві межу обмеження. Далі потрібно скористатися функцією РНР $ form
= substr ($ form, 0,99);. Цим ви просто відрізаєте частина отриманого рядка,
перевищує 100 символів (стоїть цифра 99, так як рахунок символів починається з
нуля). Тепер всі потуги Ваших знайомих завалити інформацією, що Вас будуть марні,
так як Ваш розумний скрипт не пропустить більше певного Вами кількості
символів. p>
Власне кажучи, у функції substr (string, start,
length); зовсім інше призначення. Вона повертає частину рядка string,
що визначається параметрами start (початок) та length (довжина). Якщо параметр start
позитивний, то повертається рядок буде починатися з start-ого символу
рядка string. Приклади: p>
$ form = substr ( "abcdef", 1);// поверне
"bcdef" p>
Якщо параметр length зазначений і він позитивний, то
повертається рядок закінчиться за length символів від початку start. Це приведе
до рядка з негативною довжиною (тому що початок буде за кінцем рядка),
тому повертається рядок буде містити один символ від початку рядка start.
Якщо length зазначений і він негативний, то повертається рядок закінчиться за
length від кінця рядка string. Це знову призведе до рядка з негативною
завдовжки, тому повертається рядок буде містити один символ від початку
рядка start. Приклади: p>
$ str = str_replace ( "red", "black",
$ str);// в рядку чорний колір буде замінений на червоний. p>
Наступна важлива і корисна функція - знаходження
довжини рядка. Синтаксис - strlen (string str); Приклад - $ a = strlen ( "qwerty");. У
змінної $ a буде число 6, так як довжина рядка - 6 символів. Ще одна цікава
можливість мови РНР - переклад тексту (а значить - і символьних рядків) з однієї
кодування в інше. Це дуже корисно, якщо потрібно узгодити кодування,
наприклад, сайту і поштової програми. Причому підтримуються самі
поширені російські кодування: string convert_cyr_string (str, from, to);.
Аргументи from і to є одним символом, який визначає вихідну та
цільову кодову таблицю. Підтримувані типи: p>
k - koi8-r p>
w - windows-1251 p>
i - iso8859-5 p>
a - x-cp866 p>
d - x-cp866 p>
m - x-mac-cyrillic p>
Htmlspecialchars - переводить спеціальні символи в
коди HTML. Htmlspecialchars (string);
Певні символи мають особливе значення в HTML і повинні бути замінені кодами
HTML, якщо вони такі є. Ця функція повертає рядки з виробленими
такими змінами. Функція корисна для отчистки отриманого від користувача
тексту від розмітки HTML (дошки повідомлень, гостьові книги). Здійснюються
наступні заміни: p>
'&' (амперсанд) стає '&' p>
' "' (подвійні лапки) стає '"' p>
'<' (знак менше) стає '<' p>
'>' (знак більше) стає '>' p>
Слід зазначити, що ця функція не замінює нічого,
крім зазначеного вище. Для повної обробки застосовують функцію htmlentities ().
Вона переводить всі можливі символи в коди HTML. Htmlentities (string); Ця функція
ідентична htmlspecialchars (), крім того, що всі символи, які мають
відповідний код HTML, замінюються на цей HTML код. В даний час
застосовується кодова таблиця ISO-8859-1. p>
Окремо слід розглянути функції пошуку в рядку.
Strchr - Знаходить першу появу символу. strchr (haystack, needle); Ця
функція є псевдонімом для функції strstr (), і повністю їй ідентична.
Повертає всі haystack з першої появи рядка needle і до кінця. Якщо
параметр needle не знайдений, то повертається false. Якщо параметр needle НЕ
є рядком, то він переводиться в ціле число та розглядається як
числове значення символу. Strrpos - Знаходить позицію останньої появи
символу в рядку. Strrpos (haystack, needle); Повертає номер позиції останнього
появи символу needle в рядку haystack. Слід зазначити, що needle в цьому
випадку може бути тільки єдиним символом. Якщо в якості параметра
needle вказується рядок, то тільки перший символ буде використаний. Якщо
needle не знайдений, то повертається false. Якщо параметр needle не є
рядком, то він переводиться в десяткове число та розглядається як числове
значення символу. Strrchr - Знаходить остання поява символу в рядку. P>
Strrchr (haystack, needle); Ця функція повертає позицію
haystack, з якої починається остання поява needle і триває до
кінця haystack. Повертає false якщо needle не знайдено. Якщо параметр needle
містить більш ніж один символ, то використовується перший символ. Якщо параметр
needle не є рядком, то він переводиться в ціле число та розглядається
як числове значення символу. Приклад: p>
// отримання всього після останньої нового рядка p>
$ text = "Line 1nLine 2nLine 3"; p>
$ last = substr (strrchr ($ text, 10), 1); p>
Strtok - розбиває рядок. strtok (arg1, arg2);
Використовується для розбиття рядка. Це означає, що якщо ви маєте рядок типу
"Як добре програмувати", то ви можете розбити цей рядок на
окремі слова, використовуючи пробіл як роздільник. p>
$ string = "Як добре програмувати"; p>
$ tok = strtok ($ string, ""); p>
while ($ tok) (echo
"Word = $ tok p>
"; $ tok =
strtok ( "");) p>
Слід зазначити, що тільки перший виклик функції
strtok використовує рядковий аргумент. Для кожного наступного виклику функції
strtok необхідний тільки роздільник, так як це дозволяє контролювати
становище в поточному рядку. Для початку заново або для розбиття нового рядка вам
необхідно просто викликати strtok з параметром рядка знову для її
ініціалізації. Ви можете додавати кілька роздільників в параметр роздільник.
Рядок буде розділятися при виявленні будь-якого із зазначених символів. Також
будьте уважні до роздільник рівним "0". Це може викликати
помилку в певних виразах. p>
Ось те, що знадобиться Вам для роботи з рядками в
першу чергу. Тут наведений далеко не повний перелік всіх строкових функцій.
Розглянуто тільки самі основні. За детальною інформацією я відсилаю Вас до
перекладу керівництва по РНР всеросійського клубу Web-майстрів, на основі даних
якого і написана ця стаття. Адреса в
Інтернеті - http://www.webclub.ru/. p>
Список літератури h2>
Для підготовки даної роботи були використані
матеріали з сайту http://www.realcoding.net/
p>