<? phpukraine ІНСТРУМЕНТИ
⌕Пошук по платформі

Екранування рядків PHP

Готує рядок для вставки в одинарні чи подвійні лапки, у регулярний вираз або в шаблон LIKE.

У БРАУЗЕРІ ТЕКСТ → ТЕКСТ
РОБОЧА ЗОНА
ЩО РОБИТЬ

Екранує рядок так, щоб PHP прочитав його як задумано

Рядок з апострофами, лапками, доларами чи зворотними слешами треба вставити в код так, щоб інтерпретатор не сприйняв частину тексту як синтаксис. Інструмент екранує під обраний контекст: одинарні лапки, подвійні лапки, heredoc, регулярний вираз через preg_quote і шаблон SQL LIKE.

ЯК ЦЕ ПРАЦЮЄ В PHP

У кожного контексту свій набір особливих символів. В одинарних лапках це лише ' і \, у подвійних додаються $ і керівні послідовності, у регулярному виразі дужки, крапка, плюс, зірочка, знак питання, у LIKE відсоток і підкреслення. Правило одне: екранувати на виході, у тому контексті, куди рядок іде, а не «про всяк випадок» при вводі.

$raw = "O'Reilly costs $5 (approx.)";

$single = '\'' . str_replace(['\\', '\''], ['\\\\', '\\\''], $raw) . '\'';
// 'O\'Reilly costs $5 (approx.)'

$pattern = '/' . preg_quote($raw, '/') . '/u';
// /O'Reilly costs \$5 \(approx\.\)/u

$like = addcslashes($raw, '%_\\');   // для LIKE ... ESCAPE '\'
ПИТАННЯ

Що питають про цей інструмент

Одинарні простіші: у них екрануються лише сам апостроф і зворотний слеш. У подвійних працюють інтерполяція змінних і керівні послідовності на кшталт \n, тому екранувати доводиться ще $ і подвійну лапку. Для статичних рядків беріть одинарні, для рядків зі змінними — подвійні або sprintf.

У регулярних виразах особливі символи інші: крапка, дужки, плюс, знак питання. preg_quote екранує саме їх, а другим аргументом ще й роздільник шаблону. addslashes для регулярок не годиться і робить рядок невалідним.

У LIKE відсоток і підкреслення це підстановки, тому в пошуковому запиті їх треба екранувати зворотним слешем і вказати ESCAPE '\\' у SQL, якщо база не вважає слеш екрануючим за замовчуванням. І це не заміна підготовлених виразів: значення все одно передавайте як параметр.

ДАЛІ ПО ТЕМІ