addcslashes

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

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

Описание

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

Функция добавляет обратные слеши перед символами, которые перечислили в параметре 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\[ \]

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

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

Пример #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;

?>

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

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

Добавить

Примечания пользователей 3 notes

up
11
phpcoder at cyberpimp dot pimpdomain dot com
20 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
17 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
2
natNOSPAM at noworrie dot NO_SPAM dot com
23 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.
To Top