PHP 8.1.24 Released!


(PHP 4, PHP 5, PHP 7, PHP 8)

addcslashesЭкранирует строку слешами в стиле языка C


addcslashes(string $string, string $characters): string

Возвращает строку, экранированную обратными слешами перед символами, указанными в параметре characters.

Список параметров


Экранируемая строка.


Список экранируемых символов. Если characters содержит символы \n, \r и т.п., они будут преобразованы в стиле C, тогда как другие нецифробуквенные символы с ASCII-кодами ниже 32 и выше 126 будут преобразованы в восьмеричное представление.

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

echo addcslashes('foo[ ]', 'A..z');
// выводит: \f\o\o\[ \]
// Будут экранированы заглавные и строчные английские буквы
// ... а также [\]^_`
Также, если ASCII-код первого символа диапазона больше, чем последнего, диапазон не будет создан. Вместо этого будут экранироваться только первый символ, последний символ и точка. Для определения ASCII-кода символов используйте функцию ord().
echo addcslashes("zoo['.']", 'z..A');
// выводит: \zoo['\.']

Будьте внимательны при экранировании символов 0, a, b, f, n, r, t и v. Они будут преобразованы в \0, \a, \b, \f, \n, \r, \t и \v, которые являются предопределёнными escape-последовательностями в языке Си. Многие из этих последовательностей также определены в других Си-подобных языках, включая PHP. Это означает, что вы можете не получить ожидаемого результата, если будете использовать вывод функции addcslashes() для создания кода в этих языках с использованием этих символов в characters.

Возвращаемые значения

Возвращает экранированную строку.


characters, например, "\0..\37", что проэкранирует все символы с ASCII-кодами от 0 до 31.

Пример #1 Пример использования addcslashes()

= addcslashes($not_escaped, "\0..\37!@\177..\377");

Смотрите также

  • stripcslashes() - Удаляет экранирование символов, произведённое функцией addcslashes
  • stripslashes() - Удаляет экранирование символов
  • addslashes() - Экранирует строку с помощью слешей
  • htmlspecialchars() - Преобразует специальные символы в HTML-сущности
  • quotemeta() - Экранирует специальные символы

add a note

User Contributed Notes 6 notes

phpcoder at cyberpimp dot pimpdomain dot com
18 years ago
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!


= '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.
stein at visibone dot com
15 years ago
addcslashes() treats NUL as a string terminator:

assert("any" === addcslashes("any\0body", "-"));

unless you order it backslashified:

assert("any\\000body" === addcslashes("any\0body", "\0"));

(Uncertain whether this should be declared a bug or simply that addcslashes() is not binary-safe, whatever that means.)
natNOSPAM at noworrie dot NO_SPAM dot com
21 years ago
I have found the following to be much more appropriate code example:

= addcslashes($not_escaped, "\0..\37!@\@\177..\377");

This will protect original, innocent backslashes from stripcslashes.
glitchmr at myopera dot com
10 years ago
If you need JS escaping function, use json_encode() instead.
vishal dot ceeng at gmail dot com
4 years ago
echo addcslashes("zoo['.']", 'z..A');

Above code will create an error as per below

Invalid '..'-range, '..'-range needs to be incrementing -
15 years ago
Be carefull with adding the \ to the list of encoded characters. When you add it at the last position it encodes all encoding slashes. I got a lot of \\\ by this mistake.

So always encode \ at first.
To Top