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

时间:2013-04-14 16:58:59

标签: php

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

"ABC" => "\x41\x42\x43"

我知道它可以通过几个步骤完成,我只是想知道我是否会因使用单个本机函数而造成不必要的复杂化?

4 个答案:

答案 0 :(得分:1)

没有本机功能,但您可以使用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

答案 1 :(得分:0)

你为什么不尝试这样的事?

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中是原生的,并提供相同的功能。

答案 2 :(得分:0)

$n = 1234;
echo printf("%x", $n); //should return the hexadecimal format of the number

答案 3 :(得分:0)

没有内置的PHP函数来实现相同的结果,但是对于一些PHP-Fu,你可以在一行中完成:

$str = 'ABC';
$str = '\x'.implode('\x', str_split(bin2hex($str), 2));
echo $str; // \x41\x42\x43

还有一个piece of code in the PHP docs可以得到完全相同的结果:

$str = 'ABC';
$field=bin2hex($str);
$field=chunk_split($field,2,"\\x");
$field= "\\x" . substr($field,0,-2);
echo $field; // \x41\x42\x43