addcslashes

(PHP 4, PHP 5)

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

Описание

string addcslashes ( string $str , string $charlist )

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

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

str

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

charlist

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

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

<?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. В C все они являются предопределенными escape-последовательностями, в то время как в PHP это только \0 (NULL), \r (возврат каретки), \n (перевод строки), \f (разрыв страницы), \v (вертикальная табуляция) и \t (табуляция).

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

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

Список изменений

Версия Описание
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() - Экранирует специальные символы

Коментарии

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.
2002-05-17 19:22:37
http://php5.kiev.ua/manual/ru/function.addcslashes.html
Автор:
<?php
function jsaddslashes($s)
{
 
$o="";
 
$l=strlen($s);
 for(
$i=0;$i<$l;$i++)
 {
 
$c=$s[$i];
  switch(
$c)
  {
   case 
'<'$o.='\\x3C'; break;
   case 
'>'$o.='\\x3E'; break;
   case 
'\''$o.='\\\''; break;
   case 
'\\'$o.='\\\\'; break;
   case 
'"'$o.='\\"'; break;
   case 
"\n"$o.='\\n'; break;
   case 
"\r"$o.='\\r'; break;
   default:
   
$o.=$c;
  }
 }
 return 
$o;
}

?>
<script language="javascript">
document.write("<? echo jsaddslashes('<h1 style="color:red">hello</h1>'); ?>");
</script>

output :

<script language="javascript">
document.write("\x3Ch1 style=\"color:red\"\x3Ehello\x3C/h1\x3E");
</script>
2003-09-21 14:44:40
http://php5.kiev.ua/manual/ru/function.addcslashes.html
jsAddSlashes for XHTML documents:

<?php
header
("Content-type: text/xml");

print <<<EOF
<?xml version="1.0"?>
<html>
<head>
<script type="text/javascript">

EOF;

function 
jsAddSlashes($str) {
   
$pattern = array(
       
"/\\\\/"  "/\n/"    "/\r/"    "/\"/"    ,
       
"/\'/"    "/&/"     "/</"     "/>/"
   
);
   
$replace = array(
       
"\\\\\\\\""\\n"     "\\r"     "\\\""    ,
       
"\\'"     "\\x26"   "\\x3C"   "\\x3E"
   
);
    return 
preg_replace($pattern$replace$str);
}

$message jsAddSlashes("\"<Hello>\",\r\n'&World'\\!");

print <<<EOF
alert("$message");
</script>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>

EOF;
?>
2004-05-31 12:51:55
http://php5.kiev.ua/manual/ru/function.addcslashes.html
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.
2005-01-20 01:02:17
http://php5.kiev.ua/manual/ru/function.addcslashes.html
Автор:
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.
2007-10-26 20:34:39
http://php5.kiev.ua/manual/ru/function.addcslashes.html
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.)
2007-11-12 17:16:08
http://php5.kiev.ua/manual/ru/function.addcslashes.html
If you need JS escaping function, use json_encode() instead.
2013-07-02 21:55:59
http://php5.kiev.ua/manual/ru/function.addcslashes.html

    Поддержать сайт на родительском проекте КГБ