addcslashes

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

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

Описание

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

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

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

string

Строка, которую требуется заэкранировать.

characters

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

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

<?php

echo addcslashes('foo[ ]', 'A..z');
// Выводит: \f\o\o\[ \]

// Функция заэкранирует заглавные и строчные английские буквы
// ... а также [\]^_`

?>
Функция не создаст диапазон, если ASCII-код первого символа диапазона больше последнего. Вместо этого функция заэкранирует только первый символ, последний символ и точку. Значение ASCII-кода символов находят функцией ord().
<?php

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.

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

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

Примеры

Символы наподобие "\0..\37" в параметре characters заэкранируют каждый символ с ASCII-кодами от 0 до 31.

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

<?php

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

?>

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

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

add a note

User Contributed Notes 6 notes

up
7
phpcoder at cyberpimp dot pimpdomain dot com
19 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!

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.
up
4
stein at visibone dot com
16 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.)
up
1
natNOSPAM at noworrie dot NO_SPAM dot com
22 years ago
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.
up
-1
glitchmr at myopera dot com
11 years ago
If you need JS escaping function, use json_encode() instead.
up
-4
vishal dot ceeng at gmail dot com
5 years ago
echo addcslashes("zoo['.']", 'z..A');

Above code will create an error as per below

Invalid '..'-range, '..'-range needs to be incrementing -
up
-6
Johannes
16 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