addslashes()
Функция addslashes() добавляет обратный слеш перед определёнными символами в строке, что удобно при работе со спецсимволами.
Функция addslashes() добавляет обратный слеш (\) перед определёнными символами в строке, чтобы её можно было безопасно встраивать в код или данные. Она экранирует четыре символа: одинарную кавычку ('), двойную кавычку ("), сам обратный слеш (\) и NUL-байт (\0). Это полезно, когда нужно поместить строку внутрь другой строки в кавычках, не нарушая при этом окружающий синтаксис.
Синтаксис
addslashes(string $string): stringФункция принимает один параметр — строку для экранирования — и возвращает новую строку с добавленными обратными слешами. Исходная строка остаётся неизменной.
| Параметр | Описание |
|---|---|
$string | Обязательный. Строка, которую необходимо экранировать. |
Базовый пример
Строка ниже содержит как одинарные, так и двойные кавычки. При передаче в addslashes() возвращается копия, в которой каждая кавычка экранирована:
Результат:
This is a string with \'quotes\' and \"double quotes\".Перед каждым символом ' и " теперь стоит обратный слеш, поэтому строку можно помещать в контекст с кавычками, не завершая при этом окружающую строку досрочно.
Обращение результата с помощью stripslashes()
addslashes() является обратной функцией по отношению к stripslashes(). Всё, что первая добавляет, вторая удаляет, поэтому значение можно преобразовать туда и обратно без потери данных:
<?php
$original = "O'Reilly's book costs \$5.";
$escaped = addslashes($original);
$restored = stripslashes($escaped);
echo $escaped . "\n"; // O\'Reilly\'s book costs $5.
echo $restored . "\n"; // O'Reilly's book costs $5.
var_dump($original === $restored); // bool(true)
?>Удаляются только те обратные слеши, которые были добавлены самой функцией addslashes(), поэтому восстановленная строка точно совпадает с оригинальной.
Когда использовать
Используйте addslashes(), когда нужно встроить текст внутрь другой строки в кавычках — например, при формировании строкового литерала для экспортного файла, фрагмента конфигурации или вывода, который впоследствии будет обработан функцией eval() (использования которой, как правило, следует избегать). Это вспомогательная функция форматирования, а не функция экранирования, привязанная к какому-либо конкретному назначению.
addslashes() не является функцией безопасности
Это наиболее важный момент для понимания. addslashes() не делает строку безопасной для SQL-запросов или HTML-вывода, и использование её в таком качестве делает приложение уязвимым:
- Для запросов к базе данных используйте подготовленные запросы с PDO или
mysqli, либоmysqli_real_escape_string()в качестве устаревшего подхода к экранированию. В отличие отaddslashes(), функцияmysqli_real_escape_string()учитывает соединение и кодировку. - Для HTML-вывода используйте
htmlspecialchars(), чтобы нейтрализовать<,>,&и кавычки.
addslashes() также не поддерживает многобайтовые кодировки: она работает побайтово и может повредить или неправильно экранировать строки в таких кодировках, как Shift-JIS или GBK, — именно поэтому на неё нельзя полагаться при обеспечении безопасности SQL.
Связанные функции
stripslashes()— удаляет обратные слеши, добавленные функциейaddslashes().addcslashes()— позволяет самостоятельно выбрать символы для экранирования.quotemeta()— экранирует метасимволы регулярных выражений.htmlspecialchars()— экранирует символы, имеющие специальное значение в HTML.