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

search for in the

AddSlashes> <String Functions
Last updated: Fri, 22 Aug 2008

view this page in

addcslashes

(PHP 4, PHP 5)

addcslashesEscapa una cadena de la misma forma que lo hace C

Descripción

string addcslashes ( string $cadena , string $lista_caracteres )

Devuelve una cadena con barras invertidas antes de los caracteres definidos en el parámetro lista_caracteres . Si lista_caracteres contiene caracteres como \n, \r, etc. también se convierten de la misma forma, mientras que los caracteres con códico ASCII inferior a 32 y superior a 126 son convertidos a representación octal.

Se debe tener en cuenta que si se marcan para escapar los caracteres 0, a, b, f, n, r, t y v, se transforman en los caracteres especiales \0, \a, \b, \f, \n, \r, \t y \v. En PHP \0 (NULL), \r (retorno de carro), \n (nueva línea) y \t (tabulador) son secuencias de escape predefinidas, mientras que en C todos los caracteres especiales mencionados anteriormente son secuencias de escape predefinidas.

El parámetro lista_caracteres puede indicar rangos como por ejemplo "\0..\37", que escaparía todos los caracteres con código ASCII entre 0 y 31.

Example #1 Ejemplo de addcslashes()

<?php
$escapado 
addcslashes($no_escapado"\0..\37!@\177..\377");
?>

Al definir secuencias de caracteres en el parámetro lista_caracteres se debe asegurar que se quieren escapar todos los caracteres incluidos en el rango.

<?php
echo addcslashes('prueba[ ]''A..z');
// La salida seria:  \p\r\u\e\b\a\[ \]
// Se escapan todos los caracteres en mayusculas y minusculas
// ... pero tambien los caracteres [\]^_` , los tabuladores, los retornos 
// de carro, las nuevas lineas, etc.
?>
Además, si el primer carácter del rango tiene un valor ASCII superior al segundo carácter que define el rango, no se puede formar el rango. En otras palabras, no se pueden definir rangos descendentes y por tanto solo se escaparán el primer carácter del rango, el segundo y los puntos que separan a los caracteres. Para obtener el valor ASCII de un carácter, se puede emplear la función ord().
<?php
echo addcslashes("zoo['.']"'z..A');
// La salida seria:  \zoo['\.']
?>

Vea también stripcslashes(), stripslashes(), htmlspecialchars() y quotemeta().



AddSlashes> <String Functions
Last updated: Fri, 22 Aug 2008
 
add a note add a note User Contributed Notes
addcslashes
stein at visibone dot com
13-Nov-2007 12:16
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.)
Johannes
27-Oct-2007 02:34
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.
phpcoder at cyberpimp dot pimpdomain dot com
20-Jan-2005 09: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
20-Jan-2005 08: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 06: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 08: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
18-May-2002 01: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.

AddSlashes> <String Functions
Last updated: Fri, 22 Aug 2008
 
 
show source | credits | sitemap | contact | advertising | mirror sites