将Hex代码转换为PHP中的可读字符串

时间:2012-12-08 03:37:51

标签: php string hex

您好StackOverflow社区,

这是我的问题,如何将具有十六进制代码的php转换为可读字符串? 我的意思是所有这2个PHP代码..

<?php

echo "\x74\150\x69\163\x20\151\x73\40\x74\145\x73\164\x69\156\x67\40\x6f\156\x6c\171";

echo test['\x74\171\x70\145'];

echo range("\x61","\x7a");

?>

这是不可读的代码,我需要一些可以将那些不可读代码转换成可读代码的php函数。所以转换后它会变成这样......

<?php

echo "this is testing only";

echo test['type'];

echo range("a","z");

?>

我知道我可以回复那个十六进制来改变它为可读字符串,但我有大量的php文件和很多的php文件,就像这样,所以我需要php函数,它可以自动将它们全部转换为可读代码。< / p>

感谢..

4 个答案:

答案 0 :(得分:11)

似乎您的代码不仅使用十六进制转义序列进行混淆,而且还使用八进制进行混淆。我已经编写了这个函数来为你解码它:

function decode_code($code){
    return preg_replace_callback(
        "@\\\(x)?([0-9a-f]{2,3})@",
        function($m){
            return chr($m[1]?hexdec($m[2]):octdec($m[2]));
        },
        $code
    );
}

在此处查看此行动:http://codepad.viper-7.com/NjiL84

答案 1 :(得分:6)

我有混合内容,除了hex和oct之外还有正常的字符。

因此,为了更新上面的Sean代码,我添加了以下

function decode_code($code)
{
    return preg_replace_callback('@\\\(x)?([0-9a-f]{2,3})@',
        function ($m) {
            if ($m[1]) {
                $hex = substr($m[2], 0, 2);
                $unhex = chr(hexdec($hex));
                if (strlen($m[2]) > 2) {
                    $unhex .= substr($m[2], 2);
                }
                return $unhex;
            } else {
                return chr(octdec($m[2]));
            }
        }, $code);
}

示例字符串

"\152\163\x6f\x6e\137d\x65\143\157\x64e"

解码输出

"json_decode"

答案 2 :(得分:2)

您可以使用PHP的本机urldecode()函数来实现此目的。只需将十六进制编码的字符串传递给函数,输出就是可读格式的字符串。

以下是演示代码的示例代码:

<?php

echo urldecode("\x74\150\x69\163\x20\151\x73\40\x74\145\x73\164\x69\156\x67\40\x6f\156\x6c\171");

?>

这应该输出:这只是测试

- seekers01

答案 3 :(得分:0)

如果没有其他转义序列,或者如果您不介意不仅转换十六进制转义序列,还转换某些特殊字符(例如\0,{{1 }},\a\b\f\n\r\t)。

但是,如果您只想转换十六进制序列,则可以使用stripcslashes来限制应更改的序列,如下所示:

\v