ConFoo 2025

addcslashes

(PHP 4, PHP 5, PHP 7, PHP 8)

addcslashesDizgeye C tarzı öncelem uygular

Açıklama

addcslashes(string $dizge, string $karakterler): string

dizge dizgesindeki karakterler bağımsız değişkeninde listelenmiş karakterlerin önüne tersbölü yerleştirilerek elde edilen dizgeyi döndürür.

Bağımsız Değişkenler

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.

Burada karakter aralığı belirtiyorsanız 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
?>
Ayrıca, bir aralığın başlangıç karakterinin ASCII değeri, son karakterininkinden büyükse ilk ve son karakter hariç bu aralıktaki hiçbir karakter öncelenmez. Bir karakterin ASCII değerini bulmak için ord() işlevini kullanın.
<?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. Bu dizilimler ayrıca, PHP dahil C'den türetilmiş dillerde de tanımlıdır. Yani, karakterler'de tanımlanan bu karakterlerle bu dillerde kod üretmek için addcslashes() çıktısını kullanmak istenen sonucu vermeyebilir.

Dönen Değerler

Öncelenmiş dizge.

Örnekler

"\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");
?>

Ayrıca Bakınız

add a note

User Contributed Notes 3 notes

up
7
phpcoder at cyberpimp dot pimpdomain dot com
19 years ago
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.
up
3
stein at visibone dot com
17 years ago
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.)
up
1
natNOSPAM at noworrie dot NO_SPAM dot com
22 years ago
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.
To Top