PHP:将字符串转换为整数而不删除前导零
我有一个输入字段,其中包含用于chmod的文件模式 如果我使用它,它被用作字符串,所以它失败了。如果我将其转换为int(intval()),它将删除前导零(0777=>777)并再次失败。如果我这样使用它:PHP:将字符串转换为整数而不删除前导零,php,int,Php,Int,我有一个输入字段,其中包含用于chmod的文件模式 如果我使用它,它被用作字符串,所以它失败了。如果我将其转换为int(intval()),它将删除前导零(0777=>777)并再次失败。如果我这样使用它: $int = intval($input); $finished = 0 . $int; 这也会失败,因为为int($finished)为false 如何解决这个问题?前导零对于整数来说是不存在的概念,因为它们在数学上不重要。在十进制表示法中,整数0777简单而精确地等于777 但是,如果
$int = intval($input);
$finished = 0 . $int;
这也会失败,因为为int($finished)
为false
如何解决这个问题?前导零对于整数来说是不存在的概念,因为它们在数学上不重要。在十进制表示法中,整数
0777
简单而精确地等于777
但是,如果您试图将八进制表示法中的“0777”转换为整数(511
作为十进制),以便与chmod()
一起使用,则可以使用octdec($input)
。该函数获取一个字符串并吐出一个整数,完全按照tin上的说明执行
当然,请确保首先执行验证,例如使用正则表达式。您不希望将全局或无效标志交给
chmod()
,并可能将您的敏感文件和文件夹公开。请尝试使用preg\u match()检查输入。请参阅下面的代码
if(preg_match("/[^0-9.]/", $input))
{
return false;
}
else
{
-- Some Code Here --
}
谢谢。没有什么需要解决的,整数类型不能以0开头,除非它等于0。0777的值等于777,通常将权限设置为777没有问题,系统将知道将其视为0777 如果必须传递前导零,则它必须是字符串(例如,
'0'。$finished
)
Shai.您正在使用输入字段获取
$input
。这意味着该值是一个字符串
你在寻找一个内在的价值观。不将字符串作为八进制数处理
要求$mode
参数为整数值
要转换包含八进制数的字符串,可以使用以下函数:
$int = octdec($value); # '0777' -> 511
因此,您可能希望验证输入,并检查它是否也符合八进制数的条件,例如,通过使用再次转换它并测试其结果是否相同:
$valid = "0".decoct($int) === $value;
当您使用函数0时$int;php理解的是一个添加两个字符串的操作。所以结果
$finished将是一个字符串。尝试使用函数编号\u格式进行求解。此答案正确。但是,如果您只是为了验证输入而这样做,正则表达式可能会更有用,因为它实际上能够检测无效数据,而不仅仅是将无效数据转换为某个“任意”整数。@Matthew:也可以进行清理: