是否有一个本机PHP 函数用于将字符串转换为其 HEX 表示形式,然后可以将其eval()
作为字符串,例如:
"ABC" => "\x41\x42\x43"
我知道它可以通过几个步骤来完成,我只是想知道我是否不必要地使可以用单个本机函数完成的事情复杂化?
是否有一个本机PHP 函数用于将字符串转换为其 HEX 表示形式,然后可以将其eval()
作为字符串,例如:
"ABC" => "\x41\x42\x43"
我知道它可以通过几个步骤来完成,我只是想知道我是否不必要地使可以用单个本机函数完成的事情复杂化?
没有本机函数,但您可以使用hex2bin
eval 十六进制的 PHP 代码,例如
eval(hex2bin("6563686f20706928293b")); # Output: 3.14159265359
eval(hex2bin(bin2hex("echo pi();"))); # Behind the scenes.
或者您可以调用名称为十六进制字符串的函数:
$ echo '<?$_=hex2bin(7069);die($_());' | php # 7069 = pi
3.14159265359
你为什么不试试这样的东西?
function strtohex($string) {
if (!empty($string)) {
$output = null;
$count = strlen($string, "UTF-8");
for ($i = 0; $i < $count; $i++) {
$output .= dechex(ord($string[$i]));
}
return $output;
}
}
对于单行,我能想到的唯一替代方法是bin2hex()
函数,它是 PHP 中的原生函数,并且提供相同的功能。
$n = 1234;
echo printf("%x", $n); //should return the hexadecimal format of the number
没有内置的 PHP 函数可以实现相同的结果,但是使用一些 PHP-Fu,您可以在一行中完成:
$str = 'ABC';
$str = '\x'.implode('\x', str_split(bin2hex($str), 2));
echo $str; // \x41\x42\x43
PHP 文档中还有一段代码给出了完全相同的结果:
$str = 'ABC';
$field=bin2hex($str);
$field=chunk_split($field,2,"\\x");
$field= "\\x" . substr($field,0,-2);
echo $field; // \x41\x42\x43