2016-08-01 49 views
0

以下是我的代碼示例:addcslashes逃逸大寫字母

<?php 
    echo addcslashes('ABC','\0..\37'); 
?> 

我的輸出

\A\B\C 

按照文件,\0...\37會逃脫介於0和31。但我發現的ASCII值ASCII值超過31的大寫字母在這裏被轉義。當我嘗試用小寫字母時,它正常工作。

我應該添加什麼來使addcslashes函數對給定的ASCII字符有效?

+0

PHP不會在單引號中解釋轉義序列(參見[字符串文檔](http://php.net/manual/en/language.types.string.php#language.types.string.syntax.double) )。 – wazelin

回答

2

用雙引號,這樣\ -escapes將正常工作:

echo addcslashes('ABC', "\0..\37"); 

單引號'\0..\37'被解釋爲\ +範圍0..\ +字符37

例如,所有大寫字母將在0..\範圍內,這就是爲什麼他們被轉義。

1

您需要使用雙引號爲$charlist參數:

echo addcslashes('ABC', "\0..\37"); 

隨着single quoted string反斜槓並不代表一個特殊字符序列。

另請參閱double quoted strings的使用說明書。

+0

謝謝。但是爲什麼單斜槓的工作方式不同 –

+0

因爲[單引號](https://secure.php.net/manual/en/language.types.string.php#language.types.string.syntax.single)反斜槓並不代表特殊的字符序列。請參閱[雙引號字符串]手冊(https://secure.php.net/manual/en/language.types.string.php#language.types.string.syntax.double) – Finwe