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

search for in the

addslashes> <Funciones de strings
[edit] Last updated: Fri, 11 May 2012

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 $str , string $charlist )

Devuelve una cadena con barras invertidas antes de los caracteres que aparecen en el parámetro charlist

Parámetros

str

La cadena a escapar.

charlist

Una lista de caracteres que seran escapados. Si charlist contiene caracteres como \n, \r etc., seran convertidos en la misma forma que el estilo de C, mientras que los caracteres con códico ASCII inferior a 32 y superior a 126 son convertidos a representación octal.

Cuando se define una secuencia de caracteres en el argumento charlist asegúrese de que se quieren escapar todos los caracteres incluidos en el rango.

<?php
echo addcslashes('foo[ ]''A..z');
// output:  \f\o\o\[ \]
// All upper and lower-case letters will be escaped
// ... but so will the [\]^_`
?>
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');
// output:  \zoo['\.']
?>

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

Valores devueltos

Devuelve una cadena con escapes

Historial de cambios

Versión Descripción
5.2.5 Las secuencias de escape \v y \f se han añadido.

Ejemplos

charlist como "\0..\37", escaparía a todos los caracteres con código ASCII entre 0 y 31.

Ejemplo #1 Ejemplo addcslashes()

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

Ver también



addslashes> <Funciones de strings
[edit] Last updated: Fri, 11 May 2012
 
add a note add a note User Contributed Notes addcslashes
kongaspar at gmail dot com 27-Jul-2009 05:33
Perhaps the following is a more efficient JavaScript escape function:

<?php
function jsEscape($str) {
    return
addcslashes($str,"\\\'\"&\n\r<>");
}
?>
stein at visibone dot com 12-Nov-2007 03: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 26-Oct-2007 05: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 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
<?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>
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.

 
show source | credits | sitemap | contact | advertising | mirror sites