(PHP 4, PHP 5, PHP 7, PHP 8)
addcslashes — Экранирует строку слешами в стиле языка C
Функция добавляет обратные слеши перед символами, которые перечислили в параметре characters,
и возвращает заэкранированную строку.
stringСтрока, в которой требуется заэкранировать символы.
characters
Список символов для экранирования.
Отдельные управляющие символы наподобие перевода строки или возврата каретки функция заменяет в стиле языка C,
если параметр characters содержит последовательности символов \n, \r и аналогичные.
Остальные небуквенно-цифровые символы с ASCII-кодами ниже 32 и выше 126 функция преобразует
в восьмеричное представление.
Список символов для экранирования.
Функция заменит во входной строке управляющие символы по правилам языка C,
если параметр characters содержит последовательности символов наподобие \n и \r.
Остальные небуквенно-цифровые символы с ASCII-кодами ниже 32 и выше 126 функция преобразует
в восьмеричное представление.
Диапазон символов в аргументе characters
определяют правильными символами начала и конца диапазона, чтобы символы между начальным
и конечным значением диапазона образовывали правильную последовательность символов.
Пример #1 Пример работы функции addcslashes() с диапазонами
<?php
echo addcslashes('foo[ ]', 'A..z');
// Выводит: \f\o\o\[ \]
// Функция заэкранирует заглавные и строчные английские буквы
// ... а также [\]^_`
?>Пример #2 Пример поведения функции addcslashes() с символами в неправильном порядке
<?php
echo addcslashes("zoo['.']", 'z..A'); // Выводит: \zoo['\.']
?>
При экранировании символов 0, a, b, f, n, r, t и v соблюдают осторожность.
Функция преобразовывает эти символы в предопределённые управляющие последовательности языка C:
0,円 \a, \b, \f, \n, \r, \t и \v. Эти последовательности работают и в других Си-подобных языках, включая PHP.
Поэтому с этими символами в аргументе characters
функция addcslashes() иногда возвращает результат, который интерпретируется как управляющие последовательности,
если использовать вывод функции для генерации кода на этих языках.
Функция возвращает заэкранированную строку.
Символы наподобие "0円..37円" в параметре characters
заэкранируют каждый символ с ASCII-кодами от 0 до 31.
Пример #3 Пример использования функции addcslashes()
<?php
$not_escaped = "PHP isThirty\nYears Old!\tYay to the Elephant!\n";
$escaped = addcslashes($not_escaped, "0円..37円!@177円..377円");
echo $escaped;
?>
If you are using addcslashes() to encode text which is to later be decoded back to it's original form, you MUST specify the backslash (\) character in charlist!
Example:
<?php
$originaltext = 'This text does NOT contain \\n a new-line!';
$encoded = addcslashes($originaltext, '\\');
$decoded = stripcslashes($encoded);
//$decoded now contains a copy of $originaltext with perfect integrity
echo $decoded; //Display the sentence with it's literal \n intact
?>
If the '\\' was not specified in addcslashes(), any literal \n (or other C-style special character) sequences in $originaltext would pass through un-encoded, but then be decoded into control characters by stripcslashes() and the data would lose it's integrity through the encode-decode transaction.addcslashes() treats NUL as a string terminator:
assert("any" === addcslashes("any0円body", "-"));
unless you order it backslashified:
assert("any\000円body" === addcslashes("any0円body", "0円"));
(Uncertain whether this should be declared a bug or simply that addcslashes() is not binary-safe, whatever that means.)I have found the following to be much more appropriate code example:
<?php
$escaped = addcslashes($not_escaped, "0円..37円!@\@177円..377円");
?>
This will protect original, innocent backslashes from stripcslashes.