PHP Doku:: Stellt bestimmten Zeichen eines Strings ein "" voran (wie in C) - function.addcslashes.html

Verlauf / Chronik / History: (1) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzTextverarbeitungZeichenkettenString-Funktionenaddcslashes

Ein Service von Reinhard Neidl - Webprogrammierung.

String-Funktionen

<<String-Funktionen

addslashes>>

addcslashes

(PHP 4, PHP 5)

addcslashesStellt bestimmten Zeichen eines Strings ein "\" voran (wie in C)

Beschreibung

string addcslashes ( string $str , string $charlist )

Gibt eine Zeichenkette zurück, in der allen Zeichen, die in charlist aufgeführt sind, ein "\" vorangestellt ist.

Parameter-Liste

str

Die zu escapende Zeichenkette.

charlist

Eine Liste der zu escapenden Zeichen. Wenn charlist Zeichen wie \n, \r etc. enthält, werden diese im C-Stil konvertiert, während andere nicht-alphanumerische Zeichen mit einem ASCII-Wert kleiner als 32 oder höher als 126 in ihre oktale Repräsentation umgewandelt werden.

Wenn Sie eine Zeichensequenz im charlist-Parameter notieren, informieren Sie sich darüber, welche Zeichen sich zwischen dem ersten und dem letzten Zeichen befinden!

<?php
echo addcslashes('foo[ ]''A..z');
// Ausgabe:  \f\o\o\[ \]
// Alle groß- und kleingeschriebenen Buchstaben werden maskiert
// ... aber ebenfalls die Zeichen [\]^_`
?>
Beachten Sie zudem, dass sofern das erste Zeichen einer Sequenz einen höheren ASCII-Wert hat als das zweite, keine Sequenz erstellt wird. Nur das erste und das letzte Zeichen sowie Punkte werden dann escaped. Verwenden Sie die Funktion ord(), um den ASCII-Wert eines Zeichens zu ermitteln.
<?php
echo addcslashes("zoo['.']"'z..A');
// Ausgabe:  \zoo['\.']
?>

Seien Sie besonders vorsichtig, wenn Sie Zeichen wie 0, a, b, f, n, r, t oder v escapen möchten. Sie werden zu \0, \a, \b, \f, \n, \r, \t oder \v gewandelt. In PHP sind \0 (NULL), \r (Wagenrücklauf), \n (Neue Zeile), \f (Seitenvorschub), \v (vertikaler Tabulator) und \t (Tabulator) vordefinierte Escape-Sequenzen, während in C alle der genannten Zeichen vordefinierte Escape-Sequenzen sind.

Rückgabewerte

Gibt die maskierte Zeichenkette zurück.

Changelog

Version Beschreibung
5.2.5 Die Escape-Sequenzen \v and \f wurden hinzugefügt.

Beispiele

charlist-Angaben wie "\0..\37" (oktal) bewirken ein Escapen aller Zeichen mit einem ASCII-Code zwischen 0 und 31 (dezimal).

Beispiel #1 addcslashes()-Beispiel

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

Siehe auch


8 BenutzerBeiträge:
- Beiträge aktualisieren...
kongaspar at gmail dot com
27.07.2009 14: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
13.11.2007 0: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.10.2007 2: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.01.2005 21: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.01.2005 8: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.05.2004 18: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.09.2003 20: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
18.05.2002 1: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.



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)