W3docs

addslashes()

Функция addslashes() добавляет обратный слеш перед определёнными символами в строке, что удобно при работе со спецсимволами.

Функция addslashes() добавляет обратный слеш (\) перед определёнными символами в строке, чтобы её можно было безопасно встраивать в код или данные. Она экранирует четыре символа: одинарную кавычку ('), двойную кавычку ("), сам обратный слеш (\) и NUL-байт (\0). Это полезно, когда нужно поместить строку внутрь другой строки в кавычках, не нарушая при этом окружающий синтаксис.

Синтаксис

addslashes(string $string): string

Функция принимает один параметр — строку для экранирования — и возвращает новую строку с добавленными обратными слешами. Исходная строка остаётся неизменной.

ПараметрОписание
$stringОбязательный. Строка, которую необходимо экранировать.

Базовый пример

Строка ниже содержит как одинарные, так и двойные кавычки. При передаче в addslashes() возвращается копия, в которой каждая кавычка экранирована:

php— editable, runs on the server

Результат:

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.

Практика

Практика
Какова функция addslashes() в PHP?
Какова функция addslashes() в PHP?
Was this page helpful?