我在Web和cli中获得了针对chr()函数的不同输出
使用php -a
php > $x = 070;
php > echo chr($x);
8
并在网络上example.com/x.php?x=070
<?php
var_dump($_GET);
$x=$_GET['x'];
var_dump(chr($x));
关注
/var/www/html/x.php:2:
array (size=1)
'x' => string '070' (length=3)
/var/www/html/x.php:4:string 'F' (length=1)
为什么他们在两者之间存在差异?
答案 0 :(得分:1)
70
作为精确整数值对应于F
的十进制 ASCII码,而070
作为精确整数值对应于 octal < / strong> 8
的ASCII码。
在两种情况下,传递的参数都被解释为整数,但是在数字前加上0
会使解释器将其视为八进制数字。
bin\php>php -r echo(chr(70));
F
bin\php>php -r echo(chr(070));
8
http://php.net/manual/en/language.types.integer.php阅读
要使用八进制表示法,请在数字前加上0(零)。要使用十六进制表示法,请在数字前加0x。要使用二进制表示法,请在数字前加0b。
将URI参数070
从string
转换为integer
,以正确修剪前导0
,实际上将值理解为70
,并使用CLI解释器照原样接受它。
答案 1 :(得分:-1)
echo chr('070'); //string return F
echo chr(070); //integer return 8