0

我在使用substr()来自正则表达式的匹配时遇到问题(使用preg_match()-$a包含匹配数组)。

回显时a[1],它等于0xe84并且是一个字符串(正如我使用 ' 检查过的那样gettype())。

substr($file, $a[2], $a[1]); //not working...

但是如果我这样做了(另请注意,我实际上不能这样做,因为第三个参数是来自正则表达式的通用 - 这只是用来说明我的问题):

substr($file, $a[2], 0xe84); //works fine - when entering the match directly as an integer

所以我的问题是为什么substr()只有当第三个参数是整数类型时才有效,我怎样才能制作$a[1]一个整数才能正常工作?

我尝试过进行类型转换(使用(int)),使用intval()以及settype(integer)on $a[1]$a[1]然后变成0(并且substr()不起作用)。

4

2 回答 2

1

'0xe84'是一个十六进制字符串,十进制是 3716。您可以使用以下方法将其转换为整数hexdec

substr($file, $a[2], hexdec($a[1]));

当您0xe84不带引号传递时它起作用的原因是因为 php 正确解释了十六进制文字。但是,当用作 string 时,它不会将其理解为十六进制数字'0xe84'

于 2011-01-06T21:33:18.687 回答
0

对于安全代码,您可以使用intval函数来检索整数值:

substr($file, $a[2], intval($a[1],16));

intval 的第二个参数表示基数,这里我们使用 HEX

问候无

于 2011-01-06T21:35:50.997 回答