addcslashes
(PHP 4, PHP 5, PHP 7)
addcslashes — Экранирует cтроку слешами в стиле языка C
Описание
$str
, string $charlist
)
Возвращает строку, экранированную обратными слешами перед символами,
указанными в параметре charlist
.
Список параметров
-
str
-
Экранируемая строка.
-
charlist
-
Список экранируемых символов. Если
charlist
содержит символы \n, \r и т.п., они будут преобразованы в стиле C, тогда как другие нецифробуквенные символы с ASCII-кодами ниже 32 и выше 126 будут преобразованы в восьмеричное представление.Следует быть внимательным при указании диапазона символов в аргументе charlist. Проверяйте, какие символы входят в этот диапазон.
<?php
echo addcslashes('foo[ ]', 'A..z');
// выводит: \f\o\o\[ \]
// Будут экранированы заглавные и строчные английские буквы
// ... а также [\]^_`
?><?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() для создания кода в этих языках с использованием этих символов в
charlist
.
Возвращаемые значения
Возвращает экранированную строку.
Список изменений
Версия | Описание |
---|---|
5.2.5 | Добавлены экранирующие последовательности \v и \f. |
Примеры
charlist
, например, "\0..\37", что
проэкранирует все символы с ASCII-кодами от 0 до 31.
Пример #1 addcslashes() example
<?php
$escaped = addcslashes($not_escaped, "\0..\37!@\177..\377");
?>
Смотрите также
- stripcslashes() - Удаляет экранирование символов, произведенное функцией addcslashes
- stripslashes() - Удаляет экранирование символов
- addslashes() - Экранирует строку с помощью слешей
- htmlspecialchars() - Преобразует специальные символы в HTML-сущности
- quotemeta() - Экранирует специальные символы
- addcslashes
- addslashes
- bin2hex
- chop
- chr
- chunk_split
- convert_cyr_string
- convert_uudecode
- convert_uuencode
- count_chars
- crc32
- crypt
- echo
- explode
- fprintf
- get_html_translation_table
- hebrev
- hebrevc
- hex2bin
- html_entity_decode
- htmlentities
- htmlspecialchars_decode
- htmlspecialchars
- implode
- join
- lcfirst
- levenshtein
- localeconv
- ltrim
- md5_file
- md5
- metaphone
- money_format
- nl_langinfo
- nl2br
- number_format
- ord
- parse_str
- printf
- quoted_printable_decode
- quoted_printable_encode
- quotemeta
- rtrim
- setlocale
- sha1_file
- sha1
- similar_text
- soundex
- sprintf
- sscanf
- str_getcsv
- str_ireplace
- str_pad
- str_repeat
- str_replace
- str_rot13
- str_shuffle
- str_split
- str_word_count
- strcasecmp
- strchr
- strcmp
- strcoll
- strcspn
- strip_tags
- stripcslashes
- stripos
- stripslashes
- stristr
- strlen
- strnatcasecmp
- strnatcmp
- strncasecmp
- strncmp
- strpbrk
- strpos
- strrchr
- strrev
- strripos
- strrpos
- strspn
- strstr
- strtok
- strtolower
- strtoupper
- strtr
- substr_compare
- substr_count
- substr_replace
- substr
- trim
- ucfirst
- ucwords
- vfprintf
- vprintf
- vsprintf
- wordwrap
Коментарии
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.
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("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.)