Addcslashes: примеры (PHP)
addcslashes(string $str, string $characters): stringPHP функция 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
Экранирует только одиночные и двойные кавычки, обратный слэш и нулевой байт. Удобно для подготовки строк к SQL-запросам без учёта всех управляющих символов.
Экранирует специальные символы регулярных выражений (. \ + * ? [ ^ ] ( $ ) ). Применяется для экранирования строк в шаблонах PCRE.
Преобразует специальные 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
$pattern = "^test[123]$";
$escaped = addcslashes($pattern, '^$[]');
echo $escaped;
?>\^test\[123\]\$
<?php
$str = "Line1\nLine2\tTab";
echo addcslashes($str, "\0..\37"); // Экранирование управляющих ASCII-символов
?>Line1\nLine2\tTab
<?php
$cmd = "echo 'Hello' > file.txt";
$safe_cmd = addcslashes($cmd, "'\"`$&|;<>()[]{}");
echo $safe_cmd;
?>echo \'Hello\' \> file.txt
<?php
$binary = "Hello\x00World";
echo addcslashes($binary, "\0..\37\177..\377");
?>Hello\x00World
Аналоги в других языках
s = "Hello\nWorld"
print(s.encode('unicode_escape').decode())
Hello\nWorld
console.log(JSON.stringify("Hello\nWorld"));
"Hello\nWorld"
SELECT QUOTE('Hello\'World');
'Hello\'World'
В отличие от PHP, эти методы часто имеют более узкую специализацию (например, для JSON или SQL). Функция addcslashes в PHP предоставляет более низкоуровневый контроль.