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

search for in the

addslashes> <Strings (αλφαριθμητικά)
Last updated: Sun, 25 Nov 2007

view this page in

addcslashes

(PHP 4, PHP 5)

addcslashes — Παράθεση του string με slashes σε στυλ όμοιο με της C

Περιγραφή

string addcslashes ( string $str , string $charlist )

Επιστρέφει ένα string με backslashes πριν τους χαρακτήρες που αναφέρονται στην παράμετρο charlist . Κάνει escape τους \n, \r κλπ., σε ένα όμοιο με τη C στυλ, χαρακτήρες με κώδικα ASCII μικρότερο του 32 και μεγαλύτερο του 126 μετατρέπονται σε οκταδική αναπαράσταση.

Να είστε προσεκτικοί εάν θέλετε να κάνετε escape τους χαρακτήρες 0, a, b, f, n, r, t και v. Θα μετατραπούν στους \0, \a, \b, \f, \n, \r, \t και \v. Στην PHP οι \0 (NULL), \r (carriage return), \n (νέα γραμμή) και \t (tab) είναι προκαθορισμένες escape sequences, ενώ στη C και οι υπόλοιποι είναι προκαθορισμένες escape sequences.

Εάν η παράμετρος charlist είναι "\0..\37", τότε θα γίνουν escaped όλοι οι χαρακτήρες που έχουν κώδικα ASCII από 0 έως 31.

Example#1 Παράδειγμα χρήσης της addcslashes()

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

Πριν καθορίσετε μία ακολουθία από χαρακτήρες στο όρισμα charlist, βεβαιωθείτε ότι ξέρετε τους χαρακτήρες που υπάρχουν μεταξύ αυτών που έχετε ορίσει ως αρχή και τέλος του πεδίου.

<?php
echo addcslashes('foo[ ]''A..z');
// output:  \f\o\o\[ \]
// All upper and lower-case letters will be escaped
// ... but so will the [\]^_` and any tabs, line
// feeds, carriage returns, etc.
?>
Επίσης, εάν ο πρώτος χαρακτήρας του πεδίου έχει μικρότερη τιμή ASCII από τον επόμενο, δεν πρόκειται να δημιουργηθεί κάποιο πεδίο. Οι μόνοι χαρακτήρες που θα γίνουν escaped είναι αυτοί της αρχής, του τέλους και η τελεία. Χρησιμοποιείστε τη συνάρτηση ord() για να εντοπίσετε την τιμή ASCII ενός χαρακτήρα.
<?php
echo addcslashes("zoo['.']"'z..A');
// output:  \zoo['\.']
?>

Ανατρέξτε επίσης στις: stripcslashes(), stripslashes(), htmlspecialchars(), και quotemeta().



addslashes> <Strings (αλφαριθμητικά)
Last updated: Sun, 25 Nov 2007
 
add a note add a note User Contributed Notes
addcslashes
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
<?
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.

addslashes> <Strings (αλφαριθμητικά)
Last updated: Sun, 25 Nov 2007
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites