Від автора: вчора вийшов вранці привітатися з сусідом. Слово за слово, потім розмова перейшла на підвищені тони і «спецсимволи» (з трьох пальців і менше), а потім нас дружини ледве розборонили. Добре, що PHP спецсимволи набагато безпечніше!
Екранування та спеціальні символи
Спецсимволи та програмування – речі нероздільні! Хочеш чи не хочеш, все одно «напорешься» на них. Найчастіше розробники «спотикаються» про лапки (подвійні і одинарні), які використовуються для відокремлення значень типу srting. Тобто спочатку йде оголошення змінної, а потім їй присвоюється якесь значення рядка. Наприклад:
З цього простого прикладу стає ясно, що з PHP екрануванням спецсимволов ви все одно рано чи пізно зустрінетеся. Чому? Тому що ця мова використовується для створення динамічних ресурсів.
З допомогою PHP сторінки сайтів збираються на стороні сервера після їхнього запиту з боку клієнтського додатка (браузера). А, як нам відомо, структура будь-якого інтернет-ресурсу розмічається за допомогою HTML. В тому числі з його допомогою задається форматування текстового контенту, в якому лапки використовуються повсюдно.
Ще один приклад
Давайте спробуємо розібрати все сказане вище на якомусь прикладі. Використання лапок у російській мові виділяються і пряма мова, та іменники з власними іменами, і інші структури.
Наприклад, нам потрібно вивести в лапках назви кораблів (ну, тих, які відразу «людина і пароплав»). Ось тут нам і знадобиться PHP екранування спецсимволов:
Начебто все правильно зробили: екранували значення рядка згідно синтаксису PHP, і назва «пароходочеловеков» (за правилами російської мови) обернули в лапки. Ось тільки у відповідь ми отримаємо на екрані не текст, а повідомлення про допущену синтаксичну помилку.
Щоб ви не мучилися, відразу покажу, як працювати теж не буде.
Звичайно, можна видалити спецсимволи в коді PHP, але тоді проявитесь серед користувачів, які будуть читати ваш контент, як безграмотні. Так що потрібно екранувати спецсимволи іншими спецсимволів
Ще кілька потрібних прикладів
Трохи «перефразуємо» наш основний приклад. Ми пам’ятаємо, що PHP тісно пов’язаний з MySQL. А у цієї СУБД апостроф ну ніяк не хоче записуватися в БД. Він ігнорується інтерпретатором. Цей знак найчастіше використовується при написанні іноземних (англомовних) або прізвищ в українській мові. Наприклад, O’connell. Щоб не проставляти слеші власноруч, екранування можна довірити функції addslashes().
Тепер з’ясуємо, як в PHP здійснити заміну спецсимволов. Для цього ми застосуємо строкову функцію str_replace(). В якості аргументів вона приймає три значення: вихідний рядок, який символ змінювати і на що. Приклад:
Також за допомогою даної функції можна прибрати спецсимволи PHP, замінивши їх на звичайний пробіл. Ось ще один варіант вирішення проблеми, але тепер вже за допомогою регулярних виразів:
З допомогою шаблону, зазначеного у функції preg_replace(), в PHP ми видалили спецсимволи із рядка. Думаю, на сьогодні регулярних виразів і спецсимволов достатньо. Я ще від вчорашніх не відійшов