2016-08-01 83 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