PHP: addcslashes - Manual

downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

addslashes Строки

Last updated: Sat, 27 Jan 2007

view this page in

# addcslashes

(PHP 4, PHP 5)

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

## Описание

string addcslashes ( string str, string charlist )

Возвращает сроку `str`, в которой перед каждым символом из перечисленных в `charlist` символов добавлен обратный слэш (`\`). Экранируются `\n`, `\r` и т.д. в стиле языка C, символы с ASCII менее 32 и более 126 преобразуются в восьмеричное представление.

Будьте внимательны при экранировании символв 0, a, b, f, n, r, t и v. Они будут преобразованы в \0, \a, \b, \f, \n, \r, \t и \v. В C все они являются предопреденными escape-последовательностями, в то время как в PHP только \0 (`NULL`), \r (возврат каретки), \n (перевод строки) и \t (табуляция).

При передаче `charlist` вида "\0..\37" будут экранированы символы с ASCII кодами от 0 до 37.

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

`<?php $escaped = addcslashes($not_escaped, "\0..\37!@\177..\377"); ?>`

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

`<?php
echo addcslashes('foo[ ]', 'A..z');
// выводит: \f\o\o\[ \]
// Будут экранированы заглавные и строчные английские буквы
// ... а также [\]^_` а также табуляция,
// возврат каретки, перевод строки и т.д.
?>`

Также, если ASCII код первого символа диапозона больше, чем последнего, диапазон не будет создан. Вместо этого будут экранироваться только первый и последний символы и точка. Для определения ASCII кода символов используйте функцию ord().

`<?php echo addcslashes("zoo['.']", 'z..A'); // выводит: \zoo['\.'] ?>`

См. также описание функций stripcslashes(), stripslashes(), htmlspecialchars() и quotemeta().

add a note User Contributed Notes
addcslashes
phpcoder at cyberpimp dot pimpdomain dot com
20-Jan-2005 12:35
`Forgot to add something:
The only time you would likely use addcslashes() without specifying the backslash (\) character in charlist is when you are VALIDATING (not encoding!) a data string.
(Validation ensures that all control characters and other unsafe characters are correctly encoded / escaped, but does not alter any pre-existing escape sequences.)
You can validate a data string multiple times without fear of "double encoding". A single decoding pass will return the original data, regardless of how many times it was validated.)`
phpcoder at cyberpimp dot pimpdomain dot com
19-Jan-2005 11:02
`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.`
ruben at intesys dot it
31-May-2004 09:51
`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;
?>`
21-Sep-2003 11:44
`<?
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>`
natNOSPAM at noworrie dot NO_SPAM dot com
17-May-2002 04:22
`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.`
add a note
addslashes Строки

Last updated: Sat, 27 Jan 2007
show source | credits | stats | sitemap | contact | advertising | mirror sites
Copyright © 2001-2007 The PHP Group
All rights reserved.
This mirror generously provided by: Yahoo! Inc.
Last updated: Sat Mar 10 11:33:19 2007 PST