If you need JS escaping function, use json_encode() instead.
(PHP 4, PHP 5, PHP 7, PHP 8)
addcslashes — Dizgeye C tarzı öncelem uygular
$dizge
, string $karakterler
) : string
dizge
dizgesindeki
karakterler
değiştirgesinde listelenmiş
karakterlerin önüne tersbölü yerleştirilerek elde edilen dizgeyi döndürür.
dizge
Öncelenecek dizge.
karakterler
Önlerine tersbölü konulacak \n
,
\r
gibi karakterleri içeren dizge. Belirtilen
karakterler C tarzı öncelenirken, ASCII kodu 32'den küçük ve 126'dan
büyük karakterler sekizlik gösterimlerine dönüştürülür.
Bu değiştirgede bir karakter aralığı belirtiyorsanız bu aralığın hangi karakterleri içerdiğine dikkat etmelisiniz.
<?php
echo addcslashes('foo[ ]', 'A..z');
// çıktısı: \f\o\o\[ \]
// Tüm büyük ve küçük harflerden başka [\]^_` karakterleri de öncelenir
?>
<?php
echo addcslashes("zoo['.']", 'z..A');
// çıktısı: \zoo['\.']
?>
Karakterleri seçerken dikkatli olun: 0, a, b, f, n, r, t ve v karakterleri \0, \a, \b, \f, \n, \r, \t ve \v karakterlerine dönüştürülecektir. Bunların hepsi C tarzı öncelemde öntanımlı dizilimler olup PHP'de \0 (NULL), \r (satırbaşı), \n (satırsonu), \f (sayfa ileri), \v (düşey sekme) ve \t (yatay sekme) öntanımlı dizilimlerdir.
Öncelenmiş dizge.
Sürüm: | Açıklama |
---|---|
5.2.5 | \v ve \f öncelem dizilimleri eklendi. |
"\0..\37" gibi bir aralık ASCII kodu 0 ile 31 arasında kalan karakterlerin de öncelenmesini sağlayacaktır.
Örnek 1 - addcslashes() örneği
<?php
$öncelemli = addcslashes($öncelemsiz, "\0..\37!@\177..\377");
?>
If you need JS escaping function, use json_encode() instead.
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.)
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.
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.
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.
echo addcslashes("zoo['.']", 'z..A');
Above code will create an error as per below
Invalid '..'-range, '..'-range needs to be incrementing -
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;
?>
<?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>