用于十六进制字符串表示的本机PHP函数


Native PHP function for hex string representation?

是否有原生PHP函数用于将字符串转换为HEX表示,然后可以将其作为字符串eval()'d,例如:

"ABC" => "'x41'x42'x43"

我知道它可以分几个步骤来完成,我只是想知道我是否不必要地使用一个本机函数可以完成的事情复杂化了?

没有本机函数,但您可以使用hex2bin来评估十六进制的PHP代码,例如

eval(hex2bin("6563686f20706928293b")); # Output: 3.14159265359
eval(hex2bin(bin2hex("echo pi();")));  # Behind the scenes.

或者您可以调用名称为十六进制字符串的函数:

$ echo '<?$_=hex2bin(7069);die($_());' | php # 7069 = pi
3.14159265359

没有内置的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
$n = 1234;
echo printf("%x", $n); //should return the hexadecimal format of the number

你为什么不试试这样的东西?

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中的原生函数,它提供了相同的功能。