我在使用来自正则表达式的匹配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()
将不起作用。)
答案 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