当第3个parem是0xe84之类的字符串时,PHP substr()无法正常工作?

时间:2011-01-06 21:24:46

标签: php regex hex substr

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

当回显a[1]时它等于0xe84并且是一个字符串(我使用gettype()检查过)。

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

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

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

所以我的问题是为什么substr()仅在第3个parem为整数类型时才起作用,如何使$a[1]为整数以使其正常工作?

我尝试使用(int)进行类型转换(使用intval()),settype(integer)使用$a[1],然后成为$a[1] 0 1}}(而substr()将不起作用。)

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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

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

此致 NIL