使用chr的程序输出不一致

时间:2018-12-07 10:07:41

标签: php

我在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)

为什么他们在两者之间存在差异?

2 个答案:

答案 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参数070string转换为integer,以正确修剪前导0,实际上将值理解为70,并使用CLI解释器照原样接受它。

答案 1 :(得分:-1)

echo chr('070'); //string return F
echo chr(070); //integer return 8