Addcslashes: примеры (PHP)

Использование addcslashes для экранирования строк в PHP
Раздел: Работа со строками
addcslashes(string $str, string $characters): string

PHP функция addcslashes

Описание функции

Функция addcslashes() в PHP экранирует строку слэшами в стиле языка C. Её применяют перед вставкой данных в среду, требующую экранирования специальных символов, например, при формировании команд для интерпретаторов или баз данных с определённым синтаксисом.

Аргументы функции
  • string (обязательный) – исходная строка для обработки.
  • characters (обязательный) – список символов, которые нужно экранировать. Можно задавать диапазоны (например, 'a..z', '0..9').

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

Примеры использования addcslashes

Экранирование букв и цифр
<?php
$str = "Hello123";
echo addcslashes($str, 'A..Z');
?>
\Hello123
<?php
$str = "Test123";
echo addcslashes($str, '0..9');
?>
Test\1\2\3
Экранирование специальных символов
<?php
$str = "Hello\nWorld";
echo addcslashes($str, "\\\n\r\t\0");
?>
Hello\nWorld

Похожие функции в PHP

addslashes()

Экранирует только одиночные и двойные кавычки, обратный слэш и нулевой байт. Удобно для подготовки строк к SQL-запросам без учёта всех управляющих символов.

quotemeta()

Экранирует специальные символы регулярных выражений (. \ + * ? [ ^ ] ( $ ) ). Применяется для экранирования строк в шаблонах PCRE.

htmlspecialchars()

Преобразует специальные HTML-символы в сущности (&, ", ', <, >). Используется для безопасного вывода данных в HTML.

Функцию addcslashes выбирают при необходимости точного контроля над экранированием конкретных символов или диапазонов.

Типичные ошибки

Экранирование уже экранированных символов
<?php
$str = "Hello\\World";
echo addcslashes($str, "\\");
?>
Hello\\\\World
Некорректные диапазоны символов
<?php
$str = "Test";
echo addcslashes($str, 'Z..A');
?>
Test

Диапазон с обратным порядком не обрабатывается, символы не экранируются.

Использование с многобайтовыми кодировками
<?php
$str = "Привет";
echo addcslashes($str, 'П..Я');
?>
Может дать неожиданный результат, так как функция не учитывает многобайтовость.

Изменения в PHP 8

Начиная с PHP 8.0, функция addcslashes больше не принимает параметры нестрокового типа. В ранних версиях происходило автоматическое преобразование типов, что могло приводить к неявному поведению.

<?php
// PHP 7: работает с предупреждением
// PHP 8: TypeError
echo addcslashes([], 'a');
?>

Расширенные примеры

Экранирование для регулярных выражений
Пример php
<?php
$pattern = "^test[123]$";
$escaped = addcslashes($pattern, '^$[]');
echo $escaped;
?>
\^test\[123\]\$
Генерация строк с управляющими символами C
Пример php
<?php
$str = "Line1\nLine2\tTab";
echo addcslashes($str, "\0..\37"); // Экранирование управляющих ASCII-символов
?>
Line1\nLine2\tTab
Подготовка данных для командной строки
Пример php
<?php
$cmd = "echo 'Hello' > file.txt";
$safe_cmd = addcslashes($cmd, "'\"`$&|;<>()[]{}");
echo $safe_cmd;
?>
echo \'Hello\' \> file.txt
Экранирование непечатных символов
Пример php
<?php
$binary = "Hello\x00World";
echo addcslashes($binary, "\0..\37\177..\377");
?>
Hello\x00World

Аналоги в других языках

Python: str.encode('unicode_escape')
s = "Hello\nWorld"
print(s.encode('unicode_escape').decode())
Hello\nWorld
JavaScript: JSON.stringify()
console.log(JSON.stringify("Hello\nWorld"));
"Hello\nWorld"
MySQL: QUOTE()
SELECT QUOTE('Hello\'World');
'Hello\'World'

В отличие от PHP, эти методы часто имеют более узкую специализацию (например, для JSON или SQL). Функция addcslashes в PHP предоставляет более низкоуровневый контроль.

PHP addcslashes function comments

En
Addcslashes Quote string with slashes in a C style